und Async/Auseait verursachten tote Sperren HttpClient.GetAsync()
im .NET 4.5, wenn die
-Modus verwendet wird, kann in einigen Fällen das Ergebnis von HttpClient
auf unbestimmte Zeit auftreten. In dem angegebenen Code wurde dieses Verhalten im Fall "Test5" beobachtet und verursachte das Problem, ob es in der async/await
-Klasse Fehler oder die API gab. httpClient.GetAsync(...)
HttpClient
Der Grund für das Schloss
Dead Lock wird durch den Fadenkontext und den Synchronisationsmechanismus verursacht, der im -Modus verwendet wird. Wenn die ASP.NET -Anforderung darauf wartet, zu sein, wird diese Methode normalerweise auf dem erfassten
wiederhergestellt, um sicherzustellen, dass die Kontextreserven erforderlich sind.
async/await
hat im Fall von Test5 jedoch Task
einen Blockierungsvorgang gestartet, wenn er auf die Ergebnisse von SynchronizationContext
wartete, dh
im Kontext. AsyncAwait_GetSomeDataAsync
HttpClient.GetAsync
Task
Verwenden Sie
in der asynchronen Methode der "Bibliothek" wie möglich. Auf diese Weise können Sie weiterhin auf normalen Thread -Pool -Threads ausgeführt werden und den ASP.NET -Anforderungskontext umgehen.Obstruktionsbetrieb vermeiden;
ConfigureAwait(false)
Wenn Sie diese Praktiken befolgen, können Sie gleichzeitig die beiden Vorteile der Verwendung von Das obige ist der detaillierte Inhalt vonWarum `httpclient.getAsync ()` Deadlock mit Async/wartet in .NET 4.5?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!