private void Update(Action <bool> callback) { try { _serviceClient.BeginGetChangedScenarios(_lastUpdateTime, (o) => { var result = Handle(() => _serviceClient.EndGetChangedScenarios(o)); if (result.Success && result.Value != null && result.Value.Any()) { var changedScenariosLW = result.Value; var changedScenarios = Scenarios.Where(x => changedScenariosLW.Any(z => z.ScenarioId == x.ScenarioId)).ToArray(); foreach (var changedScenario in changedScenariosLW) { var existingScenario = changedScenarios.FirstOrDefault(x => x.ScenarioId.Equals(changedScenario.ScenarioId)); if (existingScenario != null) { existingScenario.CurrentValue = changedScenario.CurrentValue; existingScenario.IsAvailable = changedScenario.IsAvailable; } } _lastUpdateTime = result.ServerTime ?? _lastUpdateTime; ScenariosChanged?.Invoke(changedScenarios); } callback?.Invoke(result.Success); }, null); } catch { callback?.Invoke(false); } }