1

我有这个:

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();
}));

变量 PublicCalendars 和 PrivateCalendars 都在扩展 ObservableCollection 并在调用更新期间填充。集合绑定到某些 WPF GUI,因此必须从 UI 线程添加项目。

我想删除等待并让两个调用同时运行。当两个任务都完成时,我怎样才能做到这一点并且仍然清楚我的忙碌状态?

4

1 回答 1

1

s的优势Task在于它们可以很容易地组合。所以,如果你想得到一个Task代表两个Tasks都完成的a,你可以使用一个方法来做到这一点Task.WhenAll()

await Task.WhenAny(PublicCalendars.Update(), PrivateCalendars.Update());

BusyState.ClearBusy();

Task您也可以通过保存返回的 s然后 awaiting自己获得非常相似的行为:

var publicTask = PublicCalendars.Update();
var privateTask = PrivateCalendars.Update();

await publicTask;
await privateTask;

BusyState.ClearBusy();
于 2013-02-15T01:46:46.533 回答