49

私はこのようなことをしようとしています:

foreach (var o in ObjectList) 
{ 
    CalculateIfNeedToMakeTaskForO(o);

    if (yes) 
        TaskList.Add(OTaskAsync());
}

これらすべてのタスクが完了するのを待ちたいと思います。する以外にも

foreach(var o in ObjectList)
{
    Result.Add("result for O is: "+await OTaskAsync());
}

私にできることはありますか?(より良く、よりエレガントに、より「正確に」)

4

2 に答える 2

44

あなたが探している(実装されているとTask.WaitAll仮定して)TaskListIEnumerable<Task>

Task.WaitAll(TaskList.ToArray());

編集:WaitAllタスクの配列(または可変引数配列の形式のリスト)のみを受け取るためTask、Enumerable を変換する必要があります。拡張メソッドが必要な場合は、次のようにすることができます。

public static void WaitAll(this IEnumerable<Task> tasks) 
{
    Task.WaitAll(tasks.ToArray());
}      

TaskList.WaitAll();

しかし、それは実際には構文糖衣にすぎません。

于 2013-07-12T18:33:29.600 に答える