Хорошо, поэтому в основном у меня есть множество задач (10), и я хочу запустить их все одновременно и дождаться их завершения. По завершении я хочу выполнить другие задачи. Я прочитал кучу ресурсов об этом, но я не могу понять это правильно для моего конкретного случая...
Вот что я сейчас (код был упрощен):
public async Task RunTasks(){
var tasks = new List<Task>
{
new Task(async () => await DoWork()),
//and so on with the other 9 similar tasks
}
Parallel.ForEach(tasks, task =>
{
task.Start();
});
Task.WhenAll(tasks).ContinueWith(done=>{
//Run the other tasks
});
}
//This function perform some I/O operations
public async Task DoWork(){
var results = await GetDataFromDatabaseAsync();
foreach(var result in results){
await ReadFromNetwork(result.Url);
}
}
Итак, моя проблема заключается в том, что, когда я жду завершения задач с вызовом WhenAll
, он говорит мне, что все задачи завершены, хотя ни одна из них не завершена. Я попытался добавить Console.WriteLine
в мой foreach
, и когда я ввел задачу продолжения, данные продолжают поступать из моего предыдущего Task
, которые на самом деле не закончены.
Что я здесь делаю неправильно?