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); }
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); }
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); }
//把状态保存到备忘录 public virtual void SaveCheckPoint(int version) { store.Store(key, version, state); }