問題:
在某些情況下,.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中文網其他相關文章!