Sto cercando di utilizzare Task.WaitAll
in un elenco di attività. La cosa è che i compiti sono un lambda asincrono che si rompe Tasks.WaitAll
come non aspetta mai.Task.Factory.StartNew con lambda async e Task.WaitAll
Ecco un blocco di codice di esempio:
List<Task> tasks = new List<Task>();
tasks.Add(Task.Factory.StartNew(async() =>
{
using (dbContext = new DatabaseContext())
{
var records = await dbContext.Where(r => r.Id = 100).ToListAsync();
//do long cpu process here...
}
}
Task.WaitAll(tasks);
//do more stuff here
Questo non aspetta a causa della lambda asincrona. Quindi, come dovrei aspettare le operazioni di I/O nel mio lambda?
Qual è il punto di partenza un'attività su un altro thread se la prima cosa che fai dopo l'avvio è un blocco sulla chiamata 'Task.WaitAll'? Otterrai prestazioni migliori eliminando 'ToListAsync' e rendendolo semplicemente' ToList' e eseguendolo in modo sincrono. (o se si desidera utilizzare 'ToListAsync', allora è necessario utilizzare async fino allo stack delle chiamate. –