我是HttpClient的新手。我的代码总是在状态中显示“WaitingForActivation”。请帮忙
private static async Task<HttpResponseMessage> MakeCall()
{
var httpclient = new HttpClient();
var response = await httpclient.GetAsync("http://localhost:60565/Subscribers");
return response;
}
答案 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所暗示的,它使您的呼叫再次同步。但是,在这种情况下,无需首先尝试使异步。