715 Stimmen

async/await - wann einen Task zurückgeben vs. void?

Unter welchen Umständen sollte man die

public async Task AsyncMethod(int num)

anstelle von

public async void AsyncMethod(int num)

Das einzige Szenario, das ich mir vorstellen kann, ist, wenn Sie die Aufgabe benötigen, um ihren Fortschritt verfolgen zu können.

Sind in der folgenden Methode die Schlüsselwörter async und await überflüssig?

public static async void AsyncMethod2(int num)
{
    await Task.Factory.StartNew(() => Thread.Sleep(num));
}

47 Stimmen

@Fred Meistens, aber nicht immer. Dies ist nur die Konvention und die akzeptierten Ausnahmen von dieser Konvention sind ereignisbasierte Klassen oder Schnittstellenverträge, siehe MSDN . So sollten Sie beispielsweise gängige Ereignis-Handler wie Button1_Click nicht umbenennen.

18 Stimmen

Nur eine Anmerkung, die Sie nicht verwenden sollten Thread.Sleep mit Ihren Aufgaben sollten Sie await Task.Delay(num) stattdessen

78 Stimmen

@fred Ich stimme damit nicht überein, IMO Hinzufügen einer async Suffix sollte nur verwendet werden, wenn Sie eine Schnittstelle mit sowohl sync und async Optionen bereitstellen. Dinge mit async zu benennen, wenn es nur eine Absicht gibt, ist sinnlos. Beispiel Task.Delay ist nicht Task.AsyncDelay da alle Methoden der Aufgabe Async sind

-6voto

Serg Shevchenko Punkte 624

Meine Antwort ist einfach Sie können nicht auf eine ungültige Methode warten

Error   CS4008  Cannot await 'void' TestAsync   e:\test\TestAsync\TestAsyncProgram.cs

Wenn die Methode also lautet async ist es besser, abwartend zu sein, denn man kann den Vorteil der async .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X