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を拡張しており、updateの呼び出し中に入力されます。コレクションは一部のWPFGUIにバインドされているため、アイテムの追加はUIスレッドから行う必要があります。

awaitを削除して、両方の呼び出しを同時に実行させたいのですが。これを実行し、両方のタスクが終了したときにビジー状態をクリアするにはどうすればよいですか?

4

1 に答える 1

1

sの強みは、Task簡単に構成できることです。Taskしたがって、両方の s の完了を表すa を取得したい場合は、Taskそれを行うメソッドを使用できます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 に答える