我有一个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
在设置为假之前确保两者都是Busy
假的。
我想知道是否有更好的方法来实现这一点。