2017-09-27 15 views
0

Ich schreibe C# -Code mit Visual Studio. Ich habe eine Aufgabe-Rückkehr-Funktion in einem Asynchron-Task-Methode erwartete wie folgt aus:Aufgabe async C# -Programmierung

Ich schrieb zwei mögliche Implementierungen (sofern unten) DoSomething() Verfahren. Was sind die Unterschiede zwischen diesen beiden Implementierungen? Was sind die Vorteile und/oder Nachteile eines jeden?

Task DoSomething() 
{ 
    return Task.Run(() => { // Some code }); 
} 

async Task DoSomething() 
{ 
    // Some code 
} 

Vielen Dank im Voraus!

+0

[Aufgabenklasse] (https://msdn.microsoft.com/en-us/library/system.threading.tasks.task (v = vs.110) .aspx) [Task.Run-Methode (Aktion)] (https://msdn.microsoft.com/en-us/library/hh195051(v=vs.110).aspx) Ich würde empfehlen, die [Async in C# 5. 0] (http://shop.oreilly.com/product/0636920026532.do) – rmjoia

+0

Mögliches Duplikat von [Was ist der Zweck von "Rückkehr erwarten" in C#?] (Https://stackoverflow.com/questions/19098143/ Was-ist-der-Zweck-der-Rückkehr-erwarten-in-c) – Console

+1

Mögliche Duplikat von [Unterschied zwischen dem Aufruf einer asynchronen Methode und Task.Run eine asynchrone Methode] (https://stackoverflow.com/questions/31958146/ Unterschied-zwischen-Aufruf-eine-Async-Methode-und-Task-Lauf-eine-Async-Methode) –

Antwort

1

async bedeutet wirklich, dass Sie await innerhalb Ihrer Methode verwenden werden. Wenn Sie dies nicht planen, können Sie einfach Task ohne Schlüsselwort async zurückgeben.

In jedem Fall können Sie auf die aufrufende Methode warten.

Aber es ist ziemlich unklar, was Sie im zweiten Szenario so schwer tun, richtig zu beantworten.

+0

Es ist auch erwähnenswert, dass mehrere 'erwarten' mehrere Zustandsautomaten erstellen (hinter den Kulissen), während die Rückkehr der ' Aufgabe wird direkt nicht. Könnte eine Leistungsüberlegung sein. –

0

Option 1 ist für CPU-gebundene Arbeit im Hintergrund.

Option 2 ist für asynchrone Arbeiten, d. H. Unter Verwendung von await anderen Task -Rückstellmethoden.

0

Das async Schlüsselwort können Sie das await Schlüsselwort in Ihrem Code await andere Aufgaben verwenden (async/await) Siehe

Die Task.Run(...) Code Zeitplan wird von dem Threadpool von einem Thread ausgeführt werden (siehe Task.Run Method)