Heim > Backend-Entwicklung > C++ > Task.Run vs. Async-Schlüsselwort: Wann sollte jedes für asynchrone Vorgänge verwendet werden?

Task.Run vs. Async-Schlüsselwort: Wann sollte jedes für asynchrone Vorgänge verwendet werden?

DDD
Freigeben: 2025-01-05 11:48:39
Original
192 Leute haben es durchsucht

Task.Run vs. Async Keyword: When to Use Each for Asynchronous Operations?

Asynchronität bei Do-Work-Methoden: Task.Run vs. Async-Schlüsselwort

Im Bereich der asynchronen Programmierung ist die Unterscheidung zwischen asynchroner Ausführung und Erwartbarkeit kann nuanciert werden. Lassen Sie uns in die Besonderheiten von Task.Run und dem Schlüsselwort async eintauchen und ihre Rollen bei der Erstellung von Methoden verstehen, die entweder synchron oder asynchron ausgeführt werden.

Asynchrone Ausführung: Task.Run

Mit der Task.Run-Methode können Sie die Ausführung von Code an einen Hintergrundthread delegieren. Durch die Erstellung eines Task-Objekts, das den Code kapselt, ermöglicht Ihnen Task.Run, den Code asynchron auszuführen, ohne den aktuellen Ausführungspfad zu blockieren. Allerdings macht die Verwendung von Task.Run eine Methode nicht unbedingt erwartbar.

Erwartungsfähigkeit: Das Async-Schlüsselwort

Eine asynchrone Methode ist eine Methode, die beim Erwarten angehalten und fortgesetzt werden kann Ausdrücke. Dadurch können Methoden Ausführungspunkte ohne Blockierung an den aufrufenden Thread zurückgeben. Eine als asynchron deklarierte Methode kann einen Task oder einen Task (für einen parametrisierten Rückgabewert).

Beispiel: Ausführung ohne Async/Await

// Not async because it does not use await
private Task<int> DoWorkAsync()
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}
Nach dem Login kopieren

In diesem Beispiel geben wir eine Task zurück. vom Task.Run-Delegaten. Allerdings wird die Methode selbst nicht als asynchron deklariert, da sie nicht „await“ verwendet.

Beispiel: Asynchrone Ausführung mit Await

private async Task<int> GetWebPageHtmlSizeAsync()
{
  var client = new HttpClient();
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}
Nach dem Login kopieren

In diesem Beispiel die Methode wird als asynchron deklariert und verwendet „await“, um die Ausführung beim HttpClient.GetAsync-Vorgang anzuhalten. Die Methode wird dem Aufrufer zurückgegeben, während die Webseite heruntergeladen wird, und wird dann fortgesetzt, wenn das Ergebnis verfügbar ist.

Best Practices:

  1. Überlegen Verwenden Sie das Schlüsselwort async, um Methoden zu erstellen, die die Ausführung anhalten und fortsetzen können.
  2. Verwenden Sie Task.Run, um Code asynchron in einem Hintergrundthread auszuführen, aber nur wenn Sie vermeiden müssen, den aktuellen Ausführungspfad zu blockieren.
  3. Vermeiden Sie es, synchrone Methoden vollständig in Task.Run einzuschließen. Synchrone Methoden sollten synchrone Signaturen haben.

Fazit:

Task.Run erleichtert die asynchrone Ausführung, indem Code an einen Hintergrundthread delegiert wird. Das Schlüsselwort async ermöglicht die Erwartbarkeit und ermöglicht es Methoden, die Ausführung anzuhalten und fortzusetzen, was die Flexibilität bietet, reaktionsfähigen und effizienten Code zu erstellen.

Das obige ist der detaillierte Inhalt vonTask.Run vs. Async-Schlüsselwort: Wann sollte jedes für asynchrone Vorgänge verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage