Frage:
Die Verwendung der Async/Await-Sprachfunktionen mit HttpClient.GetAsync(...) in .NET 4.5 kann unter bestimmten Umständen zu Deadlocks führen. Insbesondere das Warten auf das Ergebnis von HttpClient.GetAsync(...) kann in den folgenden Situationen zu einem Deadlock führen:
Erklärung:
Der Deadlock ist auf die Verwendung von SynchronizationContext zurückzuführen, der sicherstellt, dass in ASP.NET jeweils nur eine Anfrage verarbeitet werden kann. Bei Verwendung von „await“ wird die Methode im erfassten SynchronizationContext fortgesetzt, in diesem Fall im ASP.NET-Anforderungskontext. Wenn der Thread jedoch blockiert und auf den Abschluss der Aufgabe wartet, kann er die Methode im ASP.NET-Anforderungskontext nicht fortsetzen, was zu einem Deadlock führt.
Lösung:
Um diesen Stillstand zu vermeiden, befolgen Sie diese Best Practices:
Durch Befolgen dieser Richtlinien können Sie sicherstellen, dass die Fortsetzung der AsyncAwait_GetSomeDataAsync-Methode in einem Hintergrundthread ausgeführt wird, und das Blockieren des ASP.NET-Anforderungsthreads vermeiden, wodurch Deadlocks verhindert werden.
Weitere Informationen:
Das obige ist der detaillierte Inhalt vonWarum führt HttpClient.GetAsync(...) zu einem Deadlock, wenn Await/Async in .NET 4.5 verwendet wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!