我有这个:
BusyState.SetBusy("Updating Calendar Data");
Dispatcher.CurrentDispatcher.Invoke(new Action(async () =>
{
// calling "update" will hit servers outside my control and may take time
await PublicCalendars.Update();
await PrivateCalendars.Update();
// clearing the busy state should only happen when both update tasks are finished
BusyState.ClearBusy();
}));
vars PublicCalendars和PrivateCalendars都在扩展ObservableCollection,并在调用更新期间填充。这些集合绑定到一些WPF GUI,因此必须从UI线程添加项目。
我想删除await,并让两个调用同时运行。我怎样才能完成这项工作,并在完成这两项任务后仍然保持忙碌状态?
答案 0 :(得分:1)
Task
s的优势在于它们可以轻松编写。因此,如果您想获得代表两个Task
完成情况的Task
,您可以使用这样做的方法:Task.WhenAll()
:
await Task.WhenAny(PublicCalendars.Update(), PrivateCalendars.Update());
BusyState.ClearBusy();
您还可以通过保存返回的Task
和然后 await
来获得非常类似的行为:
var publicTask = PublicCalendars.Update();
var privateTask = PrivateCalendars.Update();
await publicTask;
await privateTask;
BusyState.ClearBusy();