Heim >Backend-Entwicklung >C++ >Task.Start/Wait vs. Async/Await: Was ist der Unterschied beim Umgang mit lang andauernden Vorgängen?

Task.Start/Wait vs. Async/Await: Was ist der Unterschied beim Umgang mit lang andauernden Vorgängen?

Barbara Streisand
Barbara StreisandOriginal
2025-01-10 22:36:41371Durchsuche

Task.Start/Wait vs. Async/Await:  What's the Difference in Handling Long-Running Operations?

Task.Start/Wait vs. Async/Await: Unterschiede bei der Handhabung zeitaufwändiger Vorgänge

In der Welt des Multithreadings und der asynchronen Programmierung ist es wichtig, den Unterschied zwischen den Methoden Task.Start/Wait und async/await zu verstehen. Diese beiden Technologien bieten unterschiedliche Mechanismen zur Abwicklung zeitaufwändiger Vorgänge und verbessern so die Reaktionsfähigkeit und Leistung der Anwendung.

Task.Start/Wait: synchrone Blockierung

In der Task.Start/Wait-Methode verwenden Sie Task.Factory.StartNew(Action), um eine neue Aufgabe zu erstellen und ihr einen Delegaten zuzuweisen, der den zeitaufwändigen Vorgang ausführt. Der Aufruf von t.Wait() zwingt dann den aufrufenden Thread, zu warten, bis die Ausführung der Aufgabe abgeschlossen ist.

Bedenken Sie den folgenden Codeausschnitt:

<code class="language-csharp">public void MyMethod()
{
  Task t = Task.Factory.StartNew(DoSomethingThatTakesTime);
  t.Wait();
  UpdateLabelToSayItsComplete();
}</code>

In diesem Beispiel führt der aufrufende Thread die UpdateLabelToSayItsComplete()-Methode erst aus, nachdem die DoSomethingThatTakesTime()-Operation abgeschlossen ist. Diese Methode blockiert die Verarbeitung im aufrufenden Thread und verzögert dadurch die Ausführung anderer Aufgaben.

Async/Await: asynchron, nicht blockierend

Im Gegensatz dazu verwenden Async/Await-Methoden asynchrone Programmierung, um zeitaufwändige Vorgänge auszuführen, ohne den aufrufenden Thread zu blockieren. Das Schlüsselwort async void ermöglicht eine asynchrone Methode, bei der der Wait-Operator die Kontrolle an den Aufrufer übergibt, bis die Aufgabe abgeschlossen ist.

Hier ist ein aktualisierter Codeausschnitt mit async/await:

<code class="language-csharp">public async void MyMethod()
{
  var result = Task.Factory.StartNew(DoSomethingThatTakesTime);
  await result;
  UpdateLabelToSayItsComplete();
}</code>

In diesem Fall unterbricht die Anweisung „await result“ die Ausführung der Methode „MyMethod()“, bis die Aufgabe „DoSomethingThatTakesTime()“ abgeschlossen ist. Gleichzeitig steht es dem aufrufenden Thread frei, andere Aufgaben auszuführen.

Unterschiede im Verständnis durch Analogie

Stellen Sie sich ein Restaurantszenario vor: Sie bestellen beim Kellner und entscheiden sich dann dafür, Ihren Freund zu ignorieren, bis die Suppe eintrifft (Task.Wait), oder Sie sprechen mit Ihrem Freund und lassen den Kellner die Suppe liefern, während der Chat angehalten ist (asynchron/ erwarten).

Das obige ist der detaillierte Inhalt vonTask.Start/Wait vs. Async/Await: Was ist der Unterschied beim Umgang mit lang andauernden Vorgängen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn