ASP.NET 中使用 Await/Async 時 HttpClient.GetAsync(...) 掛起的原因
在 ASP.NET 中,只有一個執行緒可以同時處理一個請求。雖然可以進行並行處理,但只有一個執行緒擁有請求上下文。此執行緒管理由 ASP.NET SynchronizationContext 控制。
當等待一個 Task 時,方法通常會在捕獲的 SynchronizationContext(如果不存在則為 TaskScheduler)上恢復。這與非同步控制器操作的預期行為一致。
測試案例 5 中的問題
Test5Controller.Get 中的死鎖是由於以下順序造成的:
解決問題
可以實作一些最佳實務來避免類似的問題:
結論
了解 SynchronizationContext 的作用以及使用 async/await 技術的最佳實踐,可以確保在 ASP.NET 中使用非同步程式碼時高效且無死鎖的操作。
以上是為什麼在 ASP.NET 中使用 Await/Async 時我的 HttpClient.GetAsync 呼叫掛起?的詳細內容。更多資訊請關注PHP中文網其他相關文章!