2016-12-02 5 views
5

ここでは、async/awaitキーワードは冗長だと思います。タスクを返すメソッドの数を考えるとこの並列非同期呼び出しを簡略化できますか?

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

、それらを並行して実行し、すべてが完了したときに返すために、これ以上簡単な方法はありますか?

+4

Task.WhenAll – Nkosi

+5

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

+0

Parallel.Invokeとasync/awaitを混在させているのはなぜですか? Parallel.Invokeは、別のスレッドで各呼び出しを実行し、終了するのを待っている間*ブロックします。または、配列の中に個々のタスクを格納し、配列を待つことができます –

答えて

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

任意に文脈に応じて、WhenAll().ConfigureAwait(false)に追加します。

+0

または外部メソッドisnでない場合は' Task.WaitAll'現在非同期ではなく、ブロックされている 'Parallel.Invoke'の既存のセマンティックから変更したくないということです。 –

+0

@Damien_The_Unbelieverはい、それは具体的な要件だと思います。知っている質問には本当に十分な文脈はありません。 – sellotape

+0

これは機能します! [このコメントはこちら](https://stackoverflow.com/questions/25009437/running-multiple-async-tasks-and-waiting-for-them-all-to-complete#comment65496481_25010220)は、「Task.WhenAll 'はあなたのための仕事を開始しません。あなたはそれらを"ホット "、つまり既に始まっているという意味で提供しなければなりません。"、しかし明らかにあなたはそれをする必要はありません。 – orad

関連する問題