public void JobSetState(BackgroundJobEntry job, StateEntry state) { if (job.State != null && _jobStateIndex.TryGetValue(job.State.Name, out var indexEntry)) { indexEntry.Remove(job); if (indexEntry.Count == 0) { _jobStateIndex.Remove(job.State.Name); } } job.State = state; if (!_jobStateIndex.TryGetValue(state.Name, out indexEntry)) { _jobStateIndex.Add(state.Name, indexEntry = new SortedSet <BackgroundJobEntry>(new BackgroundJobStateCreatedAtComparer())); } indexEntry.Add(job); }
public override void SetJobState([NotNull] string jobId, [NotNull] IState state) { if (jobId == null) { throw new ArgumentNullException(nameof(jobId)); } if (state == null) { throw new ArgumentNullException(nameof(state)); } if (state.Name == null) { throw new ArgumentException("Name property must not return null.", nameof(state)); } // TODO: Add test to ensure state.Name doesn't throw inside dispatcher // TODO: Add test to ensure state.SerializeData doesn't throw inside dispatcher var stateEntry = new StateEntry { Name = state.Name, Reason = state.Reason, Data = state.SerializeData() }; _actions.Add(memory => { if (memory.Jobs.TryGetValue(jobId, out var job)) { stateEntry.CreatedAt = memory.TimeResolver(); job.History.Add(stateEntry); memory.JobSetState(job, stateEntry); } }); }