Heim >Backend-Entwicklung >C++ >Warum erwartet das Mischen von ``.
C#Asynchroner Operation
und Die Ursache des Deadlocks await
.Result
Bei der Verwendung asynchroner Operationen in C#ist es wichtig, die mögliche Falle der gemischten Synchronisation und asynchronen Aufrufe zu verstehen. In diesem Beispiel hängt der letzte Test aufgrund der folgenden Codezeile aufgrund toter Schlösser:
Der Grund für den Deadlock
<code class="language-csharp">Assert.IsTrue(CheckStatus().Result); // 导致挂起</code>
ist eine asynchrone Methode, die eine boolesche Aufgabe zurückgibt.
CheckStatus()
Result
Dies führt zu einem Deadlock: Die asynchrone Methode versucht, die Ausführung im Haupt -Thread fortzusetzen, und der Haupt -Thread wartet darauf, dass die Aufgabe abgeschlossen ist. Der folgende Code zeigt die korrekte Verwendung von :
await
Vermeiden Sie direkt,
await
direkt aufzurufen
<code class="language-csharp">[Test] public async Task CheckStatusTwiceResultTest() { Assert.IsTrue(await CheckStatus()); Assert.IsTrue(await CheckStatus()); }</code>oder
direkt in der Aufgabe. Verlassen Sie sich stattdessen auf den -Modus, um sicherzustellen, dass asynchrone Operationen in nicht blockierender Operationen durchgeführt werden.
Result
Schlussfolgerung
Durch das Verständnis der potenziellen Folgen der Mischung von Synchronisation und asynchronen Aufrufen können Entwickler die asynchronen Methoden in C#effektiv anwenden, ohne tote Schlösser oder Leistungsprobleme zu begegnen. Result
Das obige ist der detaillierte Inhalt vonWarum erwartet das Mischen von ``.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!