Я пытаюсь использовать Task.WhenAll
для ожидания завершения нескольких задач.
Мой код ниже -предполагает запуск нескольких асинхронных задач, каждая из которых извлекает маршрут шины, а затем добавляет их в локальный массив. Однако Task.WhenAll(...)
возвращается немедленно, и счетчик массива локальных маршрутов равен нулю. Это кажется странным, так как я ожидаю, что различные операторы await
в каждом Task
означают, что поток приостановлен, и Task
не возвращается, пока не завершится.
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());
Я явно что-то делаю не так -, но что?