public virtual async Task CheckAndUpdateIfNeeded() {
if (_checkingInProcess) return;
_checkingInProcess = true;
_checkAndUpdateIfNeededCommand?.RaiseCanExecuteChanged();
LatestError = null;
await Task.Delay(500);
try {
if (await CheckAndUpdateIfNeededInner()) {
OnUpdated();
}
} catch (InformativeException e) {
LatestError = e.ToSingleString();
} catch (Exception e) {
LatestError = ToolsStrings.Common_UnhandledError_Commentary;
Logging.Warning(e);
} finally {
_checkingInProcess = false;
_checkAndUpdateIfNeededCommand?.RaiseCanExecuteChanged();
}
}