Heim > Backend-Entwicklung > C++ > Warte Task.run () vs. return task.run (): Was sind die wichtigsten Unterschiede in der asynchronen Programmierung von C#?

Warte Task.run () vs. return task.run (): Was sind die wichtigsten Unterschiede in der asynchronen Programmierung von C#?

Patricia Arquette
Freigeben: 2025-01-30 03:51:14
Original
437 Leute haben es durchsucht

Await Task.Run() vs. Return Task.Run(): What are the Key Differences in C# Asynchronous Programming?

C#Asynchrones Programmieren

Der Schlüsselunterschied zwischen await Task.Run() return Task.Run() In der asynchronen Programmierung ist es häufig erforderlich, Operationen außerhalb des UI -Threads durchzuführen, um die Anwendung der Anwendung zu vermeiden. Dies kann durch die Aufgabe in C#erreicht werden. Es gibt jedoch subtile Unterschiede zwischen

und

, wenn es um Abnormalitäten und andere Aspekte geht. await Task.Run() return Task.Run() <.> 1. Disposition:

Der Hauptunterschied besteht darin, dass abnormale Kommunikation. In Situation:

Die Anomalien in der asynchronen Aufgabe verbreiten die Rückrufmethode nur, wenn Sie auf die Aufgabe warten. await Task.Run()

Dies ermöglicht es ihnen, kontrolliert mit Anomalien umzugehen, um zu verhindern, dass sie versehentlich auf den UI -Faden werfen.
  • im Gegenteil in im Fall:
Die während der Aufgabenausführung geworfenen Abnormalitäten werden sofort auf die Anrufmethode zurückgeworfen und noch vor der Beobachtung der Aufgabe.

return Task.Run() Dies kann zu zufälligen Fehlern und potenziellen Sackgassen führen.

  • <.> 2. Abhängigkeit vom synchronen Kontext:
  • Ein weiterer Unterschied ist die
-Version hängt vom Synchronisationskontext des Aufrufs ab. Wenn die Aufgabe abgeschlossen ist, wird sie im selben Synchronisationskontext ausgeführt. Dies stellt sicher, dass das UI -Update (z. B. die Aktivierung der deaktivierten Schaltfläche) im richtigen Thread erfolgt.

im Gegenteil hängt die -Version nicht vom Kontext der Synchronisation ab. Fortsetzung der Vereinbarung des Standardplanungsprogramms für Aufgaben, das sich vom Synchronisationskontext des Aufruf von Threads unterscheidet.

<.> 3. Der generierte Code:

await Task.Run()

Der von den beiden Methoden generierte Code ist geringfügig unterschiedlich. Im Fall von wird eine asynchronisierte/wartete Statusmaschine erstellt, um die asynchrone Ausführung zu verwalten. Dies führt zu einem komplizierteren Code als .

return Task.Run() Code Beispiel:

Das folgende Codebeispiel zeigt diese Unterschiede:

Beispiel 1:

await Task.Run() return Task.Run()

Beispiel 2:

In diesen beiden Beispielen ist "dosomework ()" eine Methode, um bestimmte Jobs außerhalb des UI -Threads auszuführen.

Schlussfolgerung:

Die Auswahl von und

hängt von den spezifischen Anforderungen der Anwendung ab. Bei der Kontrolle einer abnormalen Verbreitung und der Sicherstellung des korrekten Synchronisationskontexts ist es wichtig,
<code class="language-csharp">async Task TestAsync()
{
    await Task.Run(() => DoSomeWork()); // 异常在等待时传播回
}</code>
Nach dem Login kopieren
zu verwenden. Wenn es kein Problem ist, Anomalien zu verbreiten oder Kontexte sofort zu synchronisieren, ist

geeignet.

Das obige ist der detaillierte Inhalt vonWarte Task.run () vs. return task.run (): Was sind die wichtigsten Unterschiede in der asynchronen Programmierung von C#?. 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