Próbuję użyć Task.WaitAll
na liście zadań. Chodzi o to, że zadania to asynchroniczna lambda, która łamie się, tak jak nigdy nie czeka.Task.Factory.StartNew z asynchroniczną wartością lambda i Task.WaitAll
Oto blok przykładowy kod:
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
nie czekać z powodu lambda asynchronicznym. Więc jak mam oczekiwać operacji I/O w mojej lambda?
Co jest punktem startu zadanie na innym wątku, jeśli pierwszą rzeczą, którą zrobisz po uruchomieniu jest blok w wywołaniu 'Task.WaitAll'? Otrzymasz lepszą wydajność, pozbawiając się 'ToListAsync' i czyniąc ją' ToList' i uruchamiając ją synchronicznie. (lub jeśli chcesz używać 'ToListAsync', musisz użyć asynchronizacji aż do stosu wywołań. –