Busy
非同期呼び出しが行われる前に true に設定され、終了時に false に設定されるプロパティがあります。現在、2 つの非同期呼び出しがあります。このロジックをどのように処理すればよいですか? 変数をロックする必要がありますか、または注意が必要なその他の並行問題はありますか?
private bool _busy;
public bool Busy
{
get { return _busy; }
set
{
bool changed = value != _busy;
_busy = value;
if (changed) RaisePropertyChanged("Busy");
}
}
private void loadUser(int userId)
{
Busy = true;
api.GetUser(userId, CancellationToken.None).ContinueWith(t =>
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Busy = false;
}));
}
private void loadOtherData(int dataId)
{
Busy = true;
api.GetData(dataId, CancellationToken.None).ContinueWith(t =>
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
Busy = false;
}));
}
実行を終了する最初のメソッドで Busy プロパティが false に設定されているため、このロジックに欠陥があることはわかっています。私が持っているアイデアは、さらに 2 つのフィールドを使用することです。isUserLoading
そしてisOtherDataLoading
、false に設定する前に、両方が false であることを確認Busy
します。
これを達成するためのより良い方法があるかどうか知りたいです。