запустить несколько задач и дождаться завершения всех задач - PullRequest
0 голосов
/ 24 марта 2019

Мне нужно запустить несколько задач для доступа к базе данных и дождаться завершения всех задач, чтобы получить результат и присвоить его моей модели представления, я пробую много примеров, но у меня никогда не было результата, любая помощь, пожалуйста, этот мой код

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 голосов
/ 24 марта 2019

Попробуйте этот код:

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);
     }
}
0 голосов
/ 24 марта 2019

Проверьте это:

 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: функция, в которую помещен вышеуказанный код, должна быть асинхронной для вышеуказанного сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...