运行多个任务并等待所有任务完成

时间:2019-03-24 18:01:20

标签: c# .net asynchronous async-await

我需要运行多个任务以访问数据库并等待所有任务完成以获取结果并将其分配给我的viewmodel,我尝试了许多示例,但我从未有结果,请帮忙,这是我的代码

var model = new AggregationViewModel();
var loadDataTasks = new Task[]
{
    Task.Run(async () =>model.Alive =  await _repository.GetCountAsync<filter>(Predicate)),
    Task.Run(async () => model.Delay = await _repository.GetCountAsync<Flight>(predicate.And(x => x.Status == "refused")))
};
try
{
    await Task.WhenAll(loadDataTasks);
    foreach (var item in loadDataTasks)
    {

    }
}
catch (Exception ex)
{
}

2 个答案:

答案 0 :(得分:0)

检查一下:

 var task1 = _repository.GetCountAsync<filter>(Predicate);
 var task2 = _repository.GetCountAsync<Flight>(predicate.And(x => x.Status == "refused"));

 await Task.WhenAll(task1, task2); //wait both tasks to finish

 model.Alive = await task1;
 model.Delay = await task2;

PS:在上述情况下,需要将上面代码放置的功能异步。

答案 1 :(得分:0)

尝试以下代码:

var model = new AggregationViewModel();

//----------------------------------------
var tasks = new List<Task<int>>();
//Add CountA
tasks.Add(_repository.GetCountAsync<filter>(Predicate));
//Add CountB
tasks.Add(_repository.GetCountAsync<Flight>(predicate.And(x => x.Status == "refused")));

//----------------------------------------
// Create a task with "allTasks" name to wait to complete all tasks
Task allTasks = Task.WhenAll(tasks);
try {
    // Wait to compelete "allTask"
     allTasks.Wait();
}
catch(AggregateException) 
{}

//----------------------------------------
//Working on the results

if (allTasks.Status == TaskStatus.RanToCompletion) {
   model.CountA=allTasks.Result[0]
   model.CountB=allTasks.Result[1]
}
// Display information on faulted tasks.
else {
    foreach (var t in tasks) {
        Console.WriteLine("Task {0}: {1}", t.Id, t.Status);
     }
}