HttpClient GetAsync总是说'WaitingForActivation'

时间:2013-09-06 08:14:36

标签: c# async-await dotnet-httpclient

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

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

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

        return response;
    }

3 个答案:

答案 0 :(得分:8)

或者,如果您的环境是同步添加.Result,请执行以下操作:

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

正如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所暗示的,它使您的呼叫再次同步。但是,在这种情况下,无需首先尝试使异步。