Asynchroner Operation:
Der subtile Unterschied zwischen und await Task.Run(); return;
return Task.Run()
<code class="language-csharp">async Task TestAsync() { await Task.Run(() => DoSomeWork()); return; }</code>
<code class="language-csharp">Task TestAsync() { return Task.Run(() => DoSomeWork()); }</code>
asynchrone Aufgaben verwenden, gibt es subtile und wichtige Unterschiede in ihrem Verhalten. Task.Run()
Der Hauptunterschied ist eine abnormale Behandlung. Im ersten Beispiel wird die Verwendung von
und erfasst und ausgeworfen, wenn die asynchrone Methode später auf die asynchrone Methode wartet. Dies ermöglicht dem Anrufer, elegant Abnormalitäten zu bewältigen. await
DoSomeWork()
im Gegenteil, im zweiten Beispiel von
await
Synchron oben
Ein weiterer Unterschied hängt mit dem synchronen Kontext zusammen. Im Beispiel wird die Operation in im synchronen Kontext des aufrufenden Threads ausgeführt. Stattdessen arbeitet im Beispiel im Kontext verschiedener Threadpools.
Dead Lock await
DoSomeWork()
return Task.Run()
Bei der Ausführung asynchroner Operationen in der GUI -Anwendung mit nicht -defauter Synchronisationskontext tritt die
aus dem UI -Thread verwenden, kann ein Deadlock auftreten. Zusammenfassung
await
Die Ergebnisse dieser beiden Codefragmente sind unterschiedlich, hauptsächlich weil sie sich von der Verwendung von Anomalien und der Verwendung von await
unterscheiden. Bei asynchronen Operationen kann die Verwendung von eine abnormale Verbreitung besser steuern und sicherstellen, dass sie im richtigen Synchronisationskontext korrekt implementiert wird.
Das obige ist der detaillierte Inhalt vonWarte Task.run (): Was ist der Unterschied zwischen `Await task.run (); return; `und` return task.run () `?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!