我有一個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