Await for list of Tasks

后端 未结 2 1902
轮回少年
轮回少年 2020-12-14 15:07

I\'m trying to do something like this:

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

    if (yes) 
        TaskList.Add(OTaskAsync         


        
相关标签:
2条回答
  • 2020-12-14 15:35

    You are looking for Task.WaitAll (assuming your TaskList implemented IEnumerable<Task>)

    Task.WaitAll(TaskList.ToArray());
    

    Edit: Since WaitAll only takes an array of task (or a list of Task in the form of a variable argument array), you have to convert your Enumerable. If you want an extension method, you can do something like this:

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

    But that's really only syntactic sugar.

    0 讨论(0)
  • 2020-12-14 15:51

    You are looking for Task.WhenAll:

    var tasks = ObjectList
        .Where(o => CalculateIfNeedToMakeTaskForO(o))
        .Select(o => OTaskAsync(o))
        .ToArray();
    var results = await Task.WhenAll(tasks);
    var combinedResults = results.Select(r => "result for O is: " + r);
    
    0 讨论(0)
提交回复
热议问题