Esecuzione di compiti in parallelo

Ok, quindi in pratica ho un sacco di compiti (10) e voglio iniziarli tutti nello stesso momento e aspettare che vengano completati. Al termine, voglio eseguire altri compiti. Ho letto un sacco di risorse su questo, ma non riesco a farlo bene per il mio caso particolare …

Ecco cosa ho attualmente (il codice è stato semplificato):

public async Task RunTasks() { var tasks = new List { 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); } } 

Quindi il mio problema è che quando aspetto che le attività vengano completate con la chiamata WhenAll , mi dice che tutte le attività sono finite anche se nessuna di esse è stata completata. Ho provato ad aggiungere Console.WriteLine nel mio foreach e quando ho inserito il task di continuazione, i dati continuano a venire dai miei precedenti Task che non sono veramente finiti.

Cosa sto facendo di sbagliato qui?