async/awaitで複数のTaskを同時に実行する
Taskの配列を作成し、Task.WhenAllを呼ぶことで、
複数のTaskを同時に実行し、全てのTaskの処理が終了するまで待機する。
private async void button1_Click(object sender, EventArgs e)
{
// Task配列の構築
List<Task> arrayTask = new List<Task>();
for (int intCount = 0; intCount < 5; intCount++)
{
Task objTask = Task.Run(async () =>
{
// 処理
await Task.Delay(5000);
});
// Task配列にTaskを追加
arrayTask.Add(objTask);
}
// Task配列の処理を実行し、全ての処理が終了するまで待機
await Task.WhenAll(arrayTask);
MessageBox.Show("完了");
}
Taskに戻り値がある場合は下記のようになる。
private async void button2_Click(object sender, EventArgs e)
{
Random objRandom = new System.Random();
// Task配列の構築
List<Task<int>> arrayTask = new List<Task<int>>();
for (int intCount = 0; intCount < 5; intCount++)
{
Task<int> objTask = Task<int>.Run(() =>
{
// 処理
return objRandom.Next();
});
// Task配列にTaskを追加
arrayTask.Add(objTask);
}
// Task配列の処理を実行し、全ての処理が終了するまで待機
int[] arrayInt = await Task.WhenAll(arrayTask);
string strResult = "";
foreach(int intValue in arrayInt)
{
strResult += "\n" + intValue.ToString();
}
MessageBox.Show("完了" + strResult);
}
注意
Task objTask = Task.Run(async () => の部分を、
誤って Task objTask = new Task(async () => としてしまうと、
WhenAll で実行されないので注意が必要。
ディスカッション
コメント一覧
まだ、コメントがありません