Esempio n. 1
0
        public Guid Schedule(Activity activity, Guid?correlationId = null)
        {
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }

            if (correlationId != null)
            {
                var existing = _persistenceStore.LoadBy(correlationId.Value);
                if (existing != null)
                {
                    return(existing.Id);
                }
            }

            var job = new Job(Guid.NewGuid(), typeof(JobRoot), "Run", new object[0], _now(),
                              correlationId: correlationId,
                              status: JobStatus.WaitingForChildren);

            var converted = _activityToContinuationConverter.Convert(activity, job);

            _persistenceStore.Store(converted.Jobs);

            job = _jobMutator.Mutate <Scheduler>(job, continuation: converted.Continuation);
            _router.Route(job);

            return(job.Id);
        }
Esempio n. 2
0
        public Job Mutate <TSource>(Job job,
                                    JobStatus?status          = null,
                                    int?dispatchCount         = null,
                                    DateTime?retryOn          = null,
                                    Continuation continuation = null,
                                    bool?suspended            = null)
        {
            var newJob = new Job(job.Id,
                                 job.Type,
                                 job.Method,
                                 job.Arguments,
                                 job.CreatedOn,
                                 job.RootId,
                                 job.ParentId,
                                 job.CorrelationId,
                                 status ?? job.Status,
                                 dispatchCount ?? job.DispatchCount,
                                 retryOn ?? job.RetryOn,
                                 job.ExceptionFilters,
                                 continuation ?? job.Continuation,
                                 suspended ?? job.Suspended);

            _repository.Store(newJob);

            if (job.Status != newJob.Status)
            {
                _eventStream.Publish <TSource>(
                    EventType.JobStatusChanged,
                    EventProperty.JobSnapshot(job),
                    EventProperty.FromStatus(job.Status),
                    EventProperty.ToStatus(newJob.Status));
            }

            return(newJob);
        }
Esempio n. 3
0
        public Job Transit(Job job, Activity activity)
        {
            if (job == null)
            {
                throw new ArgumentNullException("job");
            }
            if (activity == null)
            {
                throw new ArgumentNullException("activity");
            }

            var converted = _activityToContinuationConverter.Convert(activity, job);

            _persistenceStore.Store(converted.Jobs);

            job = _jobMutator.Mutate <WaitingForChildrenTransition>(job, status: JobStatus.WaitingForChildren,
                                                                    continuation: converted.Continuation);

            _recoverableAction.Run(() => _continuationDispatcher.Dispatch(job));

            return(job);
        }
Esempio n. 4
0
 //把状态保存到备忘录
 public virtual void SaveCheckPoint(int version)
 {
     store.Store(key, version, state);
 }