У меня есть свойство 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
.
Я хотел бы знать, есть ли лучший способ сделать это.