Best Practices von Await und Task.Result in der asynchronen C#-Programmierung
Asynchrone Programmierung in C# umfasst häufig Aufgaben, die lang laufende Arbeitseinheiten kapseln. Zwei gängige Methoden zur Bearbeitung von Aufgaben sind await
und Task.Result
. Obwohl beide ähnliche Ergebnisse erzielen können, gibt es subtile Unterschiede in ihrem Verhalten.
await
unterbricht die Ausführung der aktuellen Methode, bis die wartende Aufgabe abgeschlossen ist. Bei einer vollständig abgeschlossenen Aufgabe gibt der await
-Ausdruck direkt das Ergebnis der Aufgabe zurück, wodurch der Code sauberer wird und möglicherweise die Leistung verbessert wird.
Im Gegensatz dazu ruft Task.Result
die Ergebnisse der Aufgabe sofort ab. Wenn die Aufgabe fehlschlägt, wird eine AggregateException
-Ausnahme ausgelöst und kann in einigen asynchronen Szenarien zu einem Deadlock führen. Daher wird generell empfohlen, await
anstelle von Task.Result
zu verwenden.
Stephen Cleary empfiehlt die Verwendung von await
anstelle von Task.Result
, hauptsächlich aus den folgenden zwei Gründen:
await
schließt Ausnahmen nicht in AggregateException
ein, was die Fehlerverwaltung in asynchronem Code vereinfacht. Result
und Wait
können Deadlocks verursachen, insbesondere wenn sie innerhalb einer asynchronen Methode verwendet werden. await
Beseitigen Sie dieses Risiko, indem Sie sicherstellen, dass die Aufgabe abgeschlossen ist, bevor Sie mit der Ausführung fortfahren. Gebrauchsanweisung:
Wie von Cleary empfohlen, gelten die folgenden Richtlinien für die Verwendung von Result
, Wait
und await
:
await
verwenden. Result
und Wait
können mit Vorsicht und entsprechender Dokumentation verwendet werden. Result
und Wait
sind geeignet. Das Befolgen dieser Richtlinien stellt die korrekte Handhabung von asynchronem Code sicher, minimiert Deadlocks und vereinfacht die Fehlerbehandlung.
Das obige ist der detaillierte Inhalt vonAwait vs. Task.Result: Wann sollte ich jedes in C# verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!