C#でリストに入れた実行中のTaskを実行が終わったものから取得したい
公開日:
あんまり需要ないかもですが備忘録。
var tasks = new List<Task<int>>();
tasks.Add(Task.Run(async () => {
// なんかめっちゃ時間かかる処理
}));
・・・ 以下略
こんな
tasks
があった時に、実行が終わったものから結果を取得したい時がありました。
Task.WhenAny
でtasksのどれか一つが終わったらそれを返すようにできるのでそれとループを組み合わせればうまいことできそうです。
結果を取得したTaskをtasksから消せばWhenAnyで次に終わったTaskを取得できますね。
while (true) {
var task = await Task.WhenAny(tasks);
tasks.Remove(task);
var result = task.Result;
if (tasks.Count == 0) {
break;
}
}
ググっても見つからなかったけどCopilotには似たようなコードを教えてもらえたのでCopilotすごいね。
タグ: C#