Wie man Task.WhenAll () richtig benutzt
Ich versuche es zu benutzenTask.WhenAll
auf die Erfüllung mehrerer Aufgaben warten.
Mein Code ist unten - er soll mehrere asynchrone Aufgaben starten, von denen jede eine Busroute abruft und sie dann einem lokalen Array hinzufügt. Jedoch,Task.WhenAll(...)
Gibt sofort zurück und die Anzahl der lokalen Routen ist Null. Das kommt mir komisch vor, da ich die verschiedenen erwarten würdeawait
Aussagen in jedemTask
um zu bedeuten, dass der Fluss ausgesetzt ist, und dieTask
kehrt nicht zurück, bis es fertig ist.
List<Task> monitoredTasks = new List<Task>();
foreach (BusRouteIdentifier bri in stop.services)
{
BusRouteRequest req = new BusRouteRequest(bri.id);
// Start a new task to fetch the route for each stop
Task getRouteTask = Task.Factory.StartNew(async () =>
{
var route = await BusDataProviderManager.DataProvider.DataBroker.getRoute(req);
// Add the route to our array (on UI thread as it's observed)
await dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, delegate
{
this.routes.Add(route);
});
});
// Store the task in our monitoring list
monitoredTasks .Add(getRouteTask);
}
Debug.WriteLine("Awaiting WHENALL");
await Task.WhenAll(monitoredTasks );
Debug.WriteLine(string.Format("WHENALL returned (routes count is {0} ", this.routes.Count));
this.OnWillEndFetchingRoutes(new EventArgs());
Ich mache offensichtlich etwas falsch - aber was?