如何阻止 HttpClient.GetAsync(uri) 挂起? [复制]
Posted
技术标签:
【中文标题】如何阻止 HttpClient.GetAsync(uri) 挂起? [复制]【英文标题】:How to stop HttpClient.GetAsync(uri) from hanging? [duplicate] 【发布时间】:2014-03-26 02:57:52 【问题描述】:我有以下用于调用 uri 的代码:
var uri = string.Format("Helpers/ProfileList/Online/?locationId=0&skip=0&take=0", numProfiles);
HttpResponseMessage response = await client.GetAsync(uri);
response.EnsureSuccessStatusCode();
uri 指向一个自定义的 web api uri(我可以调试和跟进)。但是,当调用 api 中的最后一个 return 语句时,似乎什么也没发生。它应该转到response.EnsureSuccessStatusCode();
行,但不是。它似乎挂了。
【问题讨论】:
【参考方案1】:我的 spidey-sense 告诉我,在调用堆栈的更深处,您的代码阻塞了返回的任务,例如,Task.Wait
或 Task<T>.Result
。默认情况下,这将是 cause a deadlock 我在我的博客上解释的。
要修复它,请将 Task.Wait
和 Task<T>.Result
替换为 await
。
【讨论】:
我只是建议尝试await client.GetAsync(uri).ConfigureAwait(false)
,这可能会消除这样的死锁:)
是的,我在写完问题后发现了这个问题(在右侧的“相关”列中)
ConfigureAwait
更像是一种变通方法而不是解决方案,IMO;你最终会得到更脆弱的代码。更合适的解决方案是使用await
而不是Wait
或Result
。以上是关于如何阻止 HttpClient.GetAsync(uri) 挂起? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C# (.NET 4.5) 中为 HttpClient.GetAsync(URI) 创建回调?
如何确定一个404响应状态使用时,httpclient.getasync
连接到 *** 时 HttpClient.GetAsync 超时
HttpClient.GetAsync,无效的 URI 异常
HttpClient.GetAsync 一次只执行 2 个请求?
在 Azure Function 上获取数据时,HttpClient.GetAsync() 会产生 AggregateException