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 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); }