我有一个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
设置为false之前两者均为false。
我想知道是否有更好的方法来实现这一点。
我一直在使用一个数字计数器(其中您的异步调用将递增/递减)与像布尔忙属性{获得{ return _count!= 0; }}。我很好奇看到别人推荐。 – mztan 2013-05-07 00:34:52