Heim > Backend-Entwicklung > C++ > Await vs. Ergebnis in C#: Wann sollten Sie Await verwenden, anstatt auf Task.Result zuzugreifen?

Await vs. Ergebnis in C#: Wann sollten Sie Await verwenden, anstatt auf Task.Result zuzugreifen?

Mary-Kate Olsen
Freigeben: 2025-01-22 23:03:11
Original
756 Leute haben es durchsucht

Await vs. Result in C#: When Should You Use Await Instead of Accessing Task.Result?

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>
Nach dem Login kopieren

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. awaitVermeiden 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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage