public async Task <T> GetOrAddStateAsync <T>(string stateName, T value, CancellationToken cancellationToken = default) { var condRes = await this.ContainsStateAsync(stateName); if (condRes) { return(await this.GetStateAsync <T>(stateName, cancellationToken)); } this.stateChangeTracker[stateName] = StateMetadata.Create(value, StateChangeAction.Add); return(value); }
public Task SetStateAsync <T>(string stateName, T value, CancellationToken cancellationToken = default) { if (this.stateChangeTracker.ContainsKey(stateName)) { var stateMetadata = this.stateChangeTracker[stateName]; stateMetadata.Value = value; stateMetadata.ChangeAction = StateChangeAction.Update; } else if (!this.stateChangeTracker.ContainsKey(stateName)) { this.stateChangeTracker.Add(stateName, StateMetadata.Create(value, StateChangeAction.Add)); } else { this.stateChangeTracker[stateName] = StateMetadata.Create(value, StateChangeAction.Update); } return(Task.CompletedTask); }
public Task <bool> TryAddStateAsync <T>(string stateName, T value, CancellationToken cancellationToken = default) { if (this.stateChangeTracker.ContainsKey(stateName)) { var stateMetadata = this.stateChangeTracker[stateName]; if (stateMetadata.ChangeAction == StateChangeAction.Remove) { this.stateChangeTracker[stateName] = StateMetadata.Create(value, StateChangeAction.Update); return(Task.FromResult(true)); } return(Task.FromResult(false)); } if (this.stateChangeTracker.ContainsKey(stateName)) { return(Task.FromResult(false)); } this.stateChangeTracker[stateName] = StateMetadata.Create(value, StateChangeAction.Add); return(Task.FromResult(true)); }
public async Task <T> AddOrUpdateStateAsync <T>(string stateName, T addValue, Func <string, T, T> updateValueFactory, CancellationToken cancellationToken = default) { if (this.stateChangeTracker.ContainsKey(stateName)) { var stateMetadata = this.stateChangeTracker[stateName]; if (stateMetadata.ChangeAction == StateChangeAction.Remove) { this.stateChangeTracker[stateName] = StateMetadata.Create(addValue, StateChangeAction.Update); return(addValue); } var newValue = updateValueFactory.Invoke(stateName, (T)stateMetadata.Value); stateMetadata.Value = newValue; if (stateMetadata.ChangeAction == StateChangeAction.None) { stateMetadata.ChangeAction = StateChangeAction.Update; } return(newValue); } var conditionalResult = await this.TryGetStateAsync <T>(stateName, cancellationToken); if (conditionalResult != null) { var newValue = updateValueFactory(stateName, conditionalResult); this.stateChangeTracker.Add(stateName, StateMetadata.Create(newValue, StateChangeAction.Update)); return(newValue); } this.stateChangeTracker[stateName] = StateMetadata.Create(addValue, StateChangeAction.Add); return(addValue); }
public Task AddStateAsync <T>(string stateName, T value, CancellationToken cancellationToken = default) { this.stateChangeTracker.Add(stateName, StateMetadata.Create <T>(value, StateChangeAction.Add)); return(Task.CompletedTask); }