gpt4 book ai didi

c# - 使用 HttpClient.GetAsync 调用 Web API 似乎挂起

转载 作者:太空狗 更新时间:2023-10-30 01:17:50 24 4
gpt4 key购买 nike

我正在研究概念原型(prototype)的证明。
我有 Asp.Net C# web 表单(Visual Studio 2013,.Net 4.5)页面。在单击按钮时,我会执行以下操作:

List<Blog> blogs = null;
protected void btnLoadData_Click(object sender, EventArgs e)
{
//...;

switch (int.Parse(rblDataSource.SelectedValue))
{
//...;

case 4:
RunAsyncBlogs().Wait();

break;

default:
blogs = localGetter.GetBlogs();
break;
}

//...;
}

RunAsyncBlogs 看起来像这样:

static async Task RunAsyncBlogs()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://localhost/wapiDemo/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

// HTTP GET
HttpResponseMessage response = await client.GetAsync("api/Blogs");
if (response.IsSuccessStatusCode)
{
List<Blog> thisBlogList = await response.Content.ReadAsAsync<List<Blog>>();
var cnt = thisBlogList.Count();
}

}
}

代码在 response = await client.GetAsync 调用处停止。当我说它停止时,调试器就像请求已经结束一样,但浏览器仍在等待。

如果我运行以相同方式调用 Web API 的控制台应用程序(我将 RunAsync() 方法复制并粘贴到其中),我将获得我的数据。因此,我相信 Web API 应用会按预期响应。

最佳答案

这个:

 RunAsyncBlogs().Wait();

使您的代码陷入僵局。它正在同步阻止您的异步方法调用,该方法调用试图将继续编码回隐式捕获的同步上下文。这就是为什么你shouldn't block on async code

protected async void btnLoadData_Click(object sender, EventArgs e)
{
// Other stuff
await RunAsyncBlogs();
}

关于c# - 使用 HttpClient.GetAsync 调用 Web API 似乎挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30245957/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com