ASP.NET 中使用 Await/Async 时 HttpClient.GetAsync(...) 挂起的原因
在 ASP.NET 中,只有一个线程可以同时处理一个请求。虽然可以进行并行处理,但只有一个线程拥有请求上下文。此线程管理由 ASP.NET SynchronizationContext 控制。
当等待一个 Task 时,方法通常会在捕获的 SynchronizationContext(如果不存在则为 TaskScheduler)上恢复。这与异步控制器操作的预期行为一致。
测试用例 5 中的问题
Test5Controller.Get 中的死锁是由于以下顺序造成的:
解决问题
可以实施一些最佳实践来避免类似的问题:
结论
了解 SynchronizationContext 的作用以及使用 async/await 技术的最佳实践,可以确保在 ASP.NET 中使用异步代码时高效且无死锁的操作。
以上是为什么我的httpclient.getAsync在使用ASP.NET中使用/异步时挂起悬挂?的详细内容。更多信息请关注PHP中文网其他相关文章!