Wir haben eine Webservice-Funktion, die eine Liste von Aufgaben im Hintergrund ausführt. Wenn alle Aufgaben abgeschlossen sind, wird es zurückgegeben.Rewrite Multi-Thread warten mit async/erwarten
var result = new List<int>();
var tasks = new List<Task<int>>();
foreach (var row in rowlist)
tasks.Add(Task.Factory.StartNew(() => DoWork(row)));
foreach (var task in tasks)
result.Add(task.Result);
Die task.Result
wartet getan für die individuelle Aufgabe zu: Ich habe die Funktion für C# 5. Ich habe die folgende Schnipsel Funktion erhalten verwaltet revisited. Ich habe dies getestet, indem ich der Methode DoWork
eine Verzögerung von drei Sekunden hinzugefügt und überprüft habe, dass sie in weniger als 5 Sekunden für eine Liste von 10 Aufgaben abgeschlossen ist.
Jetzt habe ich versucht, die Funktion mit der neuen async/await
Syntax neu zu schreiben. Aber ich kann es nicht zur Arbeit bringen. Wenn es kompiliert wird, wird es synchron ausgeführt, was durch Hinzufügen einer Wartezeit bestätigt wird.
Haben Sie Ideen, wie Sie das obige Snippet mit async/await
umschreiben können?
Dies läuft async. Aber es resultiert eine 'System.AggregateException', innere Ausnahme' {"Die Abfrageergebnisse können nicht mehr als einmal aufgelistet werden."} 'Irgendeine Idee? – Andomar
Vielleicht noch wichtiger: Warum läuft das synchron, wenn Sie die Zeile mit 'await' weglassen? – Andomar
@Andomar Rufen Sie 'ToList' nach' Select' auf, wenn Sie die Aufgaben erstellen. Das sollte den Fehler beheben. Derzeit würde es beim wiederholten Aufzählen von "Aufgaben" versuchen, die neuen Aufgaben zweimal zu erstellen, was schlecht wäre. – Servy