我尝试使用 Task.WhenAll
来等待多个任务的完成。
以下是我的代码 - 它应该启动多个异步任务,每个任务都会获取一个公交路线并将它们添加到本地数组中。然而,Task.WhenAll(...)
立即返回,而本地路线数组的计数为零。这似乎很奇怪,因为我期望在每个 Task
中的各种 await
语句意味着流程被挂起,并且 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());
显然我做错了什么-但是是什么呢?
await dispatcher
可能出了问题。UI线程会立即观察和显示吗? - cat916