问题:
在某些情况下,.NET 4.5 中使用异步/等待语言特性与 HttpClient.GetAsync(...) 可能会导致死锁。具体来说,在以下情况下等待 HttpClient.GetAsync(...) 的结果会导致死锁:
解释:
死锁是由于使用了 SynchronizationContext,它确保在 ASP.NET 中一次只能处理一个请求。当使用 await 时,方法会在捕获的 SynchronizationContext 上恢复,在这种情况下是 ASP.NET 请求上下文。但是,如果线程阻塞等待任务完成,它将无法在 ASP.NET 请求上下文中恢复方法,从而导致死锁。
解决方案:
为避免此死锁,请遵循以下最佳实践:
通过遵循这些准则,您可以确保 AsyncAwait_GetSomeDataAsync 方法的延续在后台线程上运行,并避免阻塞 ASP.NET 请求线程,从而防止死锁。
更多信息:
以上是为什么在 .NET 4.5 中使用 Await/Async 时 HttpClient.GetAsync(...) 会死锁?的详细内容。更多信息请关注PHP中文网其他相关文章!