【问题标题】:HttpClient GetAsync always says 'WaitingForActivation'HttpClient GetAsync 总是说“WaitingForActivation”
【发布时间】:2013-09-06 08:14:35
【问题描述】:

我是 HttpClient 的新手。我下面的代码总是在状态中显示“WaitingForActivation”。请帮忙

private static async Task<HttpResponseMessage> MakeCall()
{
    var httpclient = new HttpClient();

    var response = await httpclient.GetAsync("http://localhost:60565/Subscribers");

    return response;
}

【问题讨论】:

    标签: c# async-await dotnet-httpclient


    【解决方案1】:

    或者,如果您的环境是同步的,请添加.Result,如下所示:

    GetAsync("http://localhost:60565/Subscribers").Result;
    

    【讨论】:

      【解决方案2】:

      这很正常。只需await 返回的任务(异步)等待它完成。

      您可能会发现我的intro to async 很有帮助。

      【讨论】:

        【解决方案3】:

        正如 Cleary 在他的帖子中所写,为了创建异步调用,您的任务也应该被等待。这意味着,您的问题 (MakeCall()) 中的方法是异步的,但对该方法的调用可能是同步的。

        一个异步示例类:

        using System.Threading.Tasks;
        
        public class SampleClass
        {
          public async Task<string> MakeCall()
          {
            # I am using the asynchronous call from the HttpClient library
            var response = await client.PostAsJsonAsync(url, creds)
            ...
          }
        }
        

        尝试等待对方法的调用。

        var makeCall = await SampleClass.MakeCall();
        

        我会避免使用.Result。正如 JDandChips 已经暗示的那样,它使您的调用再次同步。然而,在这种情况下,没有必要一开始就尝试异步。

        【讨论】:

        • The name 'await' does not exists in the current context 这就是我尝试这个时得到的结果。另外,在这个例子中class 应该是什么?
        • @GuidoG ,我添加了一个示例类。正如我所说,我使用 .PostAsJsonAsync() 进行 API 调用。
        • 感谢样品
        猜你喜欢
        • 1970-01-01
        • 2016-04-20
        • 2013-11-03
        • 2020-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多