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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage