Aufgabe.Factory.StartNew mit asynchronen lambda und Aufgabe.WaitAll

Ich versuche zu verwenden Task.WaitAll auf eine Liste von Aufgaben. Die Sache ist, die Aufgaben sind eine asynchrone lambda bricht Tasks.WaitAll wie Sie es noch nie wartet.

Hier ist ein Beispiel code-block:

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  

Diese nicht warten, weil der async-lambda. Also, wie soll ich das warten auf I/O-Operationen in meinem lambda?

Was ist der Punkt, über den Start einer Aufgabe auf einen anderen thread, wenn das erste, was Sie tun, nachdem Sie es starten, ist block auf die Task.WaitAll nennen? Sie erhalten eine bessere Leistung loszuwerden ToListAsync und machen es einfach ToList und es läuft synchron. (oder wenn Sie verwenden möchten ToListAsync dann müssen Sie die Verwendung von async-den ganzen Weg bis Ihre call-stack.

InformationsquelleAutor Jacob Roberts | 2015-06-13

Schreibe einen Kommentar