await
の結果に基づいて、WhenAll
すべてのタスクがコードのその時点で完了したことを確認できます。WaitAll
( UI スレッドをブロックするので、ここでは使用しないことが重要です。)
private async void Form1_DoubleClick(object sender, EventArgs e)
{
var tasks = new List<Task<string>>();
for (int x = 0; x < listBox1.Items.Count; x++)
{
tasks.Add(RunList(x));
}
await Task.WhenAll(tasks);
}
ここでの基本的な考え方は、タスクを呼び出す前に単純にタスクを開始するawait
ことです。2 つのタスクのみを使用した簡単な例を次に示します。
await Task.Delay(1000);
await Task.Delay(1000);
これにより、最初のタスクが実行され、次に2 番目のタスクが実行されます。
var task1 = Task.Delay(1000);
var task2 = Task.Delay(1000);
await task1;
await task2;
これにより、両方のタスクが開始され、両方のタスクが終了した後に続行され、同時に実行できるようになります。