Vergleich von Await und Result in der asynchronen C#-Programmierung
Bei der asynchronen C#-Programmierung wird das Schlüsselwort await
verwendet, um die Ausführung anzuhalten, bis die Aufgabe abgeschlossen ist. Einige Entwickler werden sich jedoch fragen: Wenn die Aufgabe abgeschlossen ist, warum wird dann await
benötigt? Ist es nicht möglich, direkt auf das Attribut Task.Result
zuzugreifen? In diesem Artikel wird dieses Problem untersucht und erläutert, warum await
bevorzugt verwendet werden sollte.
Stephen Cleary empfiehlt in seinem Buch „Concurrency in C# Cookbook“ den folgenden Codeausschnitt:
<code class="language-C#">var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask; </code>
Hier stellt downloadTask
eine HTTP-GET-Anfrage dar und timeoutTask
dient als Timeout-Monitor. Wenn die HTTP-Anfrage nicht innerhalb der angegebenen Zeit abgeschlossen wird, wird timeoutTask
abgeschlossen.
Gehen Sie davon aus, dass die HTTP-Anfrage abgeschlossen ist, bevor das Zeitlimit überschritten wird. In diesem Fall ist downloadTask
fertig. Warum verwendet das Code-Snippet ein zweites await
? Warum nicht einfach downloadTask.Result
verwenden?
Die Antwort liegt in den Nuancen der Ausnahmebehandlung und möglichen Deadlocks. await
behandelt Ausnahmen anders als Result
oder Wait
. await
Vermeiden Sie das Einschließen von Ausnahmen in AggregateException
, was in asynchronem Code im Allgemeinen unerwünscht ist. Darüber hinaus können Result
und Wait
zu Deadlocks führen, insbesondere bei asynchronen Methoden.
Daher wird empfohlen, await
Vorrang einzuräumen, es sei denn, es ist klar, dass die Aufgabe abgeschlossen wurde. Im Allgemeinen sollte die Verwendung von Result
und Wait
im asynchronen Anwendungscode vermieden werden. Sie können gelegentlich in asynchronen Dienstprogrammbibliotheken oder parallelem Taskcode verwendet werden.
Durch die Befolgung dieser Richtlinien können Entwickler die Sicherheit und Wartbarkeit asynchroner Codebasen verbessern und die Lesbarkeit des Codes verbessern.
Das obige ist der detaillierte Inhalt vonAwait vs. Ergebnis in C#: Wann sollten Sie Await verwenden, anstatt auf Task.Result zuzugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!