コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            });
        }