【问题标题】:Why does ASP.NET terminates async requests?为什么 ASP.NET 会终止异步请求?
【发布时间】:2018-04-19 13:50:45
【问题描述】:

我知道这不是编写代码的正确方法,但我仍然想了解这种行为 - 每当我执行异步 HTTP 请求而不等待结果时,似乎请求已终止? (我在提琴手上看不到)。

代码示例:

public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            {
                using (var client = new HttpClient())
                {
                    client.BaseAddress = new Uri("http://localhost.fiddlerhttpclient/");
                    var response = client.GetAsync("zzzz");
                }
            }
        }
    }

如果我将代码更改为:

var response = client.GetAsync("zzzz").Result;

我确实在提琴手上看到过。我不明白为什么 - 我希望该请求仍会以某种方式在后台继续处理,那为什么不呢?

【问题讨论】:

  • 你没有await的结果。换句话说:你还没有注册任何回调。
  • @Marco - 是的,我知道这一点,但我希望即使没有人“听”结果,请求也会在后台继续进行 - 它不应该被中止。
  • 但是您在开始获取该 url 后立即处理您的 HttpClient,取消所有待处理的操作。
  • @Evk - 你是对的,如果我删除 using 我会得到预期的行为。请写下您的评论作为答案,我会接受。谢谢!

标签: c# asp.net async-await fiddler dotnet-httpclient


【解决方案1】:

释放HttpClient 会取消所有待处理的请求(如果有)。您在使用GetAsync 开始请求后立即处理您的客户端(因为using 块),因此它几乎没有机会开始发出将出现在提琴手中的实际http 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多