mrtska.net

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#


コメント