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
Freigeben: 2025-01-10 22:36:41
Original
266 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage