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