Heim > Backend-Entwicklung > C++ > Was ist der Hauptunterschied zwischen 'Await Task.run (); return; `und` return task.run () `In C# Async -Programmierung und wie wirkt sich dies aus dem Umgang mit Ausnahme aus?

Was ist der Hauptunterschied zwischen 'Await Task.run (); return; `und` return task.run () `In C# Async -Programmierung und wie wirkt sich dies aus dem Umgang mit Ausnahme aus?

Susan Sarandon
Freigeben: 2025-01-30 03:56:11
Original
563 Leute haben es durchsucht

Die wichtigsten Unterschiede zwischen await Task.Run(); return; und return Task.Run() in der asynchronen Programmierung und die Auswirkungen auf die abnormale Behandlung

What's the key difference between `await Task.Run(); return;` and `return Task.Run()` in C# async programming, and how does this impact exception handling?

Konzeptunterschiede

Der Hauptunterschied zwischen den beiden Codefragmenten ist eine abnormale Kommunikation. In der " "" -Version werden die in der Aufgabe geworfenen Abnormalitäten erfasst und im zurückgegebenen Aufgabenobjekt gespeichert. Wenn Sie auf die Aufgabe warten, werden Abnormalitäten verbreitet. Im Gegenteil, die "" -Version wartet nicht auf die Aufgabe, sodass keine Abnormalität geworfen wird, sondern sie sofort auf den Anruf werfen.

Codegenerierung await Task.Run(); return; return Task.Run();

Der von diesen beiden Codefragmenten generierte Code ist unterschiedlich. In der "" -Version generiert der Compiler eine Zustandsmaschine, um asynchrone Operationen zu verpacken, einschließlich der Behandlung abnormaler Bedingungen. Die "" -Version generiert keine Statusmaschine, da sie nicht auf asynchronen Betrieb wartet.

abnormale Behandlung

Betrachten Sie das folgende Beispiel: await Task.Run(); return; return Task.Run();

Wenn wir nennen, wird die "

" -Version eine Ausnahme ausgelöst, wenn wir auf die Aufgabe warten. Wenn wir jedoch nennen, wird die Ausnahme sofort ausgelöst. (Angenommen, die Funktion ist ordnungsgemäß abnormal behandelt). Asynchronous void -Methode

Für die asynchrone Hohlraummethode ist die Logik der abnormalen Kommunikation unterschiedlich. Wenn es existiert, werden die in der asynchronen Hohlraummethode geworfenen Anomalien in den Kontext des aktuellen Threads ausgeworfen. Andernfalls werden sie durch geworfen, und der Anrufer kann sie nicht auf denselben Stapelrahmen erledigen.
<code class="language-csharp">static async Task OneTestAsync(int n)
{
    await Task.Delay(n);
}

static Task AnotherTestAsync(int n)
{
    return Task.Delay(n);
}</code>
Nach dem Login kopieren

Simulation Asynchrones abnormale Verbreitung DoTestAsync(OneTestAsync, -2) await DoTestAsync(AnotherTestAsync, -2) Sie können eine Technik verwenden, um das abnormale Kommunikationsverhalten von asynchronen Methoden zu simulieren. DoTestAsync

In diesem Beispiel werden Abnormalitäten in die Aufgabe geworfen und sich dann durch das

-Objekt ausbreiten, ähnlich der Situation von .

Die Möglichkeit von toten Schlössern

ThreadPool.QueueUserWorkItem

asynchron/wait -Version ist im Nicht -Default -Synchronisationskontext einfacher. Beispielsweise tritt der folgende Code in WinForms oder WPF -Anwendungen auf:

Dies liegt daran, dass versucht, auf die Fertigstellung der asynchronen Operation auf dem UI -Thread zu warten, und der asynchrone Betrieb selbst muss auch auf dem UI -Thread ausgeführt werden, was zu toten Schlössern führt.

Kurz gesagt,

liefert eine strukturierte abnormale Behandlung und bringt die Abnormalität direkt auf die Call Party, und die Call Party muss von sich selbst behandelt werden. Die ausgewählte Methode hängt von Ihrer abnormalen Verarbeitungsstrategie und Ihrem Programmkontext ab. await Task.Run(); return; Die Version ist sicherer, aber es ist notwendig, das potenzielle Problem mit dem toten Schloss zu berücksichtigen. return Task.Run();

Das obige ist der detaillierte Inhalt vonWas ist der Hauptunterschied zwischen 'Await Task.run (); return; `und` return task.run () `In C# Async -Programmierung und wie wirkt sich dies aus dem Umgang mit Ausnahme aus?. 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