Heim >Backend-Entwicklung >C++ >Await Task vs. Task.Result: Was ist der Unterschied?
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!