10

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

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

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

    return response;
}
4

3 回答 3

12

或者,如果您的环境是 Synchronous add .Result,如下所示:

GetAsync("http://localhost:60565/Subscribers").Result;
于 2016-08-05T11:01:41.117 回答
3

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

您可能会发现我的介绍async很有帮助。

于 2013-09-06T11:33:05.283 回答
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 已经暗示的那样,它使您的调用再次同步。然而,在这种情况下,没有必要一开始就尝试异步。

于 2020-04-08T12:36:48.150 回答