Heim >Backend-Entwicklung >C++ >Await Task vs. Task.Result: Was ist der Unterschied?

Await Task vs. Task.Result: Was ist der Unterschied?

Barbara Streisand
Barbara StreisandOriginal
2025-01-08 08:56:42240Durchsuche

Await Task vs. Task.Result: What's the Difference?

await Task<T> vs. Task<T>.Result in der asynchronen Programmierung

Das Verständnis des Kernunterschieds zwischen await Task<T> und Task<T>.Result ist für eine effektive asynchrone Programmierung von größter Bedeutung. Lassen Sie uns dies anhand eines praktischen Beispiels veranschaulichen.

Erwägen Sie diese Methode:

<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>

Hier wird Task<T>.Result verwendet, um das Ergebnis der Aufgabe abzurufen. Dieser Ansatz kann sich jedoch erheblich auf die Parallelität auswirken, da er den aufrufenden Thread dazu zwingt, synchron auf den Abschluss der Aufgabe zu warten.

Asynchrone Programmierung löst dieses Problem elegant mit dem await-Operator, der eine nicht blockierende Unterbrechung ermöglicht. Hier ist die verbesserte, asynchrone Version:

<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>

Mit await wird der aufrufende Thread freigegeben, sodass andere Aufgaben fortgesetzt werden können. Sobald die erwartete Aufgabe abgeschlossen ist, wird der Thread fortgesetzt und das Ergebnis wird nahtlos zurückgegeben.

Im Wesentlichen: await Task<T> erleichtert einen echten asynchronen Betrieb, indem es den Thread zurückgibt, während Task<T>.Result den Thread blockiert, bis die Aufgabe abgeschlossen ist. Ein entscheidender Unterschied besteht darin, wie Ausnahmen behandelt werden: Result schließt Ausnahmen in AggregateException ein, während await die ursprüngliche Ausnahme direkt erneut auslöst.

Das obige ist der detaillierte Inhalt vonAwait Task vs. Task.Result: Was ist der Unterschied?. 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