2016-12-02 7 views
5

Ich denke, Async/erwarten Schlüsselwörter sind hier überflüssig.Kann dieser parallele Async-Aufruf vereinfacht werden?

Parallel.Invoke(
    async() => await DoSomethingAsync(1).ConfigureAwait(false), 
    async() => await DoSomethingAsync(2).ConfigureAwait(false) 
); 

Bei einer Anzahl von Aufgabe-Rückkehr Methoden, gibt es eine einfachere Art und Weise sie parallel laufen zu lassen und zurück, wenn alle abgeschlossen sind?

+4

Lesen Sie auf Task.WhenAll – Nkosi

+5

'Task.WhenAll (DoSomethingAsync (1), DoSomethingAsync (2))' – Enigmativity

+0

Warum mischen Sie 'Parallel.Invoke' und' async/erwarten'? Parallel.Invoke führt jeden Aufruf in einem separaten Thread und * block * aus, während er darauf wartet, dass sie beendet werden. Oder Sie können die einzelnen Aufgaben in einem Array speichern und warten auf das Array –

Antwort

4
await Task.WhenAll(DoSomethingAsync(1), DoSomethingAsync(2)); 

Optional .ConfigureAwait(false) zum WhenAll(), je nach Kontext hinzufügen.

+0

Oder 'Task.WaitAll' wenn die äußere Methode isn' t momentan 'async' und/oder sie wollen nicht von der existierenden Semantik der 'Parallel.Invoke' wechseln, die blockiert, nicht asynchron. –

+0

@Damien_The_Unbeliever Ja, ich denke schon, wenn das eine spezielle Anforderung ist; Es gibt nicht wirklich genug Kontext in der Frage zu wissen. – sellotape

+0

Das funktioniert! [Dieser Kommentar hier] (https://stackoverflow.com/questions/25009437/running-multiple-async-tasks-and-waiting-for-them-all-to-complete#comment65496481_25010220) verwirrte mich, dass "Task.WhenAll 'startet die Aufgaben nicht für Sie. Sie müssen sie" heiß "bereitstellen, also bereits gestartet.", aber das müssen Sie offensichtlich nicht tun. – orad

Verwandte Themen