Ich versuche Task.WaitAll
auf einer Liste von Aufgaben zu verwenden. Die Sache ist, die Aufgaben sind ein asynchrones Lambda, das Tasks.WaitAll
bricht, wie es nie wartet. HierTask.Factory.StartNew mit async Lambda und Task.WaitAll
ist ein Beispiel Codeblock:
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
Dieses wartet nicht wegen der Asynchron-Lambda. Wie soll ich also auf I/O-Operationen in meinem Lambda warten?
Was den Punkt des Ausgangs ist eine Aufgabe in einem anderen Thread, wenn das erste, was Sie tun, nachdem Sie es gestartet haben, Block auf dem 'Task.WaitAll' Aufruf ist? Sie erhalten eine bessere Leistung, indem Sie 'ToListAsync' loswerden und es nur' ToList' machen und es synchron laufen lassen. (oder wenn Sie 'ToListAsync' verwenden wollen, dann müssen Sie Async ganz nach oben in Ihrem Call-Stack verwenden. –