Heim >Backend-Entwicklung >C++ >„Task.Result' vs. „await Task': Wann sollten Sie welche verwenden?

„Task.Result' vs. „await Task': Wann sollten Sie welche verwenden?

Susan Sarandon
Susan SarandonOriginal
2025-01-08 09:02:41436Durchsuche

`Task.Result` vs. `await Task`: When Should You Use Which?

Task<T>.Result und await Task<T> in der asynchronen Programmierung verstehen

Bei der asynchronen Programmierung hat die Wahl zwischen await Task<T> und Task<T>.Result erhebliche Auswirkungen auf die Leistung und die Ausnahmebehandlung. Lassen Sie uns die wichtigsten Unterschiede untersuchen.

Die GetNameMethode veranschaulicht beide Ansätze:

Verwenden von Task<T>.Result:

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return nameTask.Result;
}</code>

nameTask.Result blockiert den aktuellen Thread, bis die Aufgabe abgeschlossen ist. Dies ist bei lang andauernden Vorgängen ineffizient und kann möglicherweise zum Einfrieren der Anwendung führen.

Verwenden von await Task<T>:

<code class="language-csharp">public async Task<string> GetName(int id)
{
    Task<string> nameTask = Task.Factory.StartNew(() => string.Format("Name matching id {0} = Developer", id));
    return await nameTask;
}</code>

await nameTask gibt den aufrufenden Thread frei, sodass andere Aufgaben gleichzeitig ausgeführt werden können. Die Methode wird erst fortgesetzt, wenn nameTask abgeschlossen ist.

Kritische Unterscheidungen:

  • Thread-Blockierung: Task<T>.ResultBlöcke; await Task<T>nicht.
  • Ausnahmebehandlung: await Task<T> gibt Ausnahmen direkt weiter; Task<T>.Result verpackt sie in ein AggregateException.

Best Practices:

  • Vermeiden Sie Task.Factory.StartNew für Hintergrundaufgaben; Verwenden Sie stattdessen Task.Run für eine höhere Effizienz und eine bessere Integration mit dem .NET-Thread-Pool.
  • Während Task<T>.Result und Task.Factory.StartNew für dynamische Aufgabenparallelität verwendet werden können, wird in asynchronen Programmierkontexten im Allgemeinen davon abgeraten, await für eine bessere Reaktionsfähigkeit und Wartbarkeit zu verwenden. Die Verwendung von await ist der bevorzugte und robustere Ansatz für asynchrone Vorgänge.

Das obige ist der detaillierte Inhalt von„Task.Result' vs. „await Task': Wann sollten Sie welche verwenden?. 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