2017-04-26 19 views
0

私はasync/awaitを使用して、並行して実行中のタスクを実行しようとしていますが、それらを同時に実行しますが、タスクをタスクに追加することはできません。タスクをすぐに実行するので、Task.WhenAll()に追加します。上記長時間実行されるタスクは、すでにこの時点で実行されているTask.WhenAll() - タスクのコレクションを追加できません - async/await

var task1 = _bll.longRunningTask1().ConfigureAwait(false); 
var task2 = _bll.longRunningTask2().ConfigureAwait(false); 

ので、最初のコレクションに保存し、その後Task.WhenAll()に入れ、その後、それらを実行することはできません:私は、次のコードを持っています。 これをコレクションに取得し、Task.WhenAll()でのみ実行する正しい方法は何ですか?私は非同期/待つために使用しようとしている

List<Task> tasks = new List<Task>(); 
tasks.Add(task1); 
tasks.Add(task2); 

await Task.WhenAll(tasks); 

答えて

3

...それらを同時に実行し

あなたはTask.WhenAllを使用して、非同期並行処理を行うことができます。

上記の長い実行中のタスクは既にこのポイントで実行されているため、コレクションに格納してからTask.WhenAll()に配置して実行することはできません。

Task.WhenAllタスクを実行しません。 Task.WhenAll複数のタスクが完了するのを単に(非同期に)待ちます。

この

を行うための正しい方法は、それはあなたが既に持っているコード何されています

var task1 = _bll.longRunningTask1().ConfigureAwait(false); 
var task2 = _bll.longRunningTask2().ConfigureAwait(false); 
await Task.WhenAll(task1, task2).ConfigureAwait(false); 

明示的List<T>を作成するには、かなり同等です:

var task1 = _bll.longRunningTask1().ConfigureAwait(false); 
var task2 = _bll.longRunningTask2().ConfigureAwait(false); 
List<Task> tasks = new List<Task>(); 
tasks.Add(task1); 
tasks.Add(task2); 
await Task.WhenAll(tasks).ConfigureAwait(false); 

いずれもうまくいくはずです。

関連する問題