Heim >Backend-Entwicklung >C++ >Warten Sie gegen Task.Wait: Warum verursacht die Verwendung von Task.wait Deadlocks?
await
: Die Wurzel des Deadlocks Task.Wait
Der Unterschied in der asynchronen Programmierung ist geringfügig wichtig. In diesem Artikel werden die Unterschiede zwischen den beiden untersucht und die gemeinsamen Deadlock -Szenen analysiert. await
Task.Wait
task.wait: synchrones Blockieren
decken Sie den aufrufenden Thread gleichzeitig ab, bis die Aufgabe abgeschlossen ist. Dies hat den Thread im Wesentlichen ausgesetzt und darauf gewartet, dass die Aufgabe ausgeführt wurde.
Task.Wait
die Ausführung der aktuellen Methode asynchron. Der Zustand der Methode wurde erfasst und eine unvollendete Aufgabe kehrte zum Anrufer zurück. Wenn der Warteausdruck abgeschlossen ist, soll der verbleibende Teil der Methode kontinuierlich betrieben werden. tote Lock -Szene
await
Berücksichtigung der folgenden Code -Beispiele, bei denen der Fehler
In diesem Code blockiert die
-Methode den aktuellen Thread und wartet auf alle Aufgaben in der Sammlung. Jede -Methode enthält jedoch einen -Ausdruck, der seine Ausführung hängt. Task.Wait
<code>Task.WaitAll(Enumerable.Range(0, 10).Select(x => Ros()).ToArray());</code>blockiert ist, kann der Ausdruck
in der Aufgabe nicht abgeschlossen werden. Dies erzeugt tote Schlösser, da die Aufgabe weiterhin ausgeführt werden kann, es sei denn, der Anruf wird aufgerufen, um seine Behinderung zu veröffentlichen. Task.WaitAll
Ros()
Warum wartet der Block darauf, tote Schlösser zu vermeiden await
Verwenden von Obstruktionswartungen, wie beispielsweise Task.WaitAll
oder sperren, wird in dieser Szene keine toten Schlösser verursachen, da sie nicht verhindert, dass die Aufgabe auf einem separaten Thread ausgeführt wird. Das Obstruktionswartung ist nur die Ausführung der Verzögerungsanrufmethode, sodass die Aufgabe fortgesetzt und schließlich abgeschlossen werden kann. await
Um tote Schlösser zu vermeiden, verstehen Sie den Unterschied zwischen
und. Im Allgemeinen wird Thread.Sleep
im asynchronen Code immer verwendet, um sicherzustellen, dass der aufrufende Thread beibehalten wird.
Das obige ist der detaillierte Inhalt vonWarten Sie gegen Task.Wait: Warum verursacht die Verwendung von Task.wait Deadlocks?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!