Die wichtigsten Unterschiede zwischen await Task.Run(); return;
und return Task.Run()
in der asynchronen Programmierung und die Auswirkungen auf die abnormale Behandlung
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();
abnormale Behandlung
Betrachten Sie das folgende Beispiel: await Task.Run(); return;
return Task.Run();
" -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>
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
-Objekt ausbreiten, ähnlich der Situation von .
Die Möglichkeit von toten Schlössern ThreadPool.QueueUserWorkItem
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!