ConvertedActivity ConvertSingleActivityToContinuation( SingleActivity singleActivity, Job parent, ExceptionFilter[] inheritedExceptionFilters) { var job = new Job(Guid.NewGuid(), singleActivity.Type, singleActivity.Name, singleActivity.Arguments, _now(), rootId: parent.RootId, parentId: parent.Id, status: JobStatus.Created, exceptionFilters: inheritedExceptionFilters.Concat(singleActivity.ExceptionFilters).ToArray()); var jobs = new List<Job>(new[] {job}); var continuation = new Continuation { Id = job.Id, Type = ContinuationType.Single, ContinueAfterHandlingFailure = singleActivity.CanContinueAfterHandlingFailure }; var onNext = ConvertCore(singleActivity.Next, parent, inheritedExceptionFilters); continuation.Next = onNext.Continuation; jobs.AddRange(onNext.Jobs); var onFailed = ConvertCore(singleActivity.OnFailed, parent, inheritedExceptionFilters); continuation.OnAllFailed = onFailed.Continuation; jobs.AddRange(onFailed.Jobs); var onCancel = ConvertCore(singleActivity.OnCancel, parent, inheritedExceptionFilters); if (onCancel.Continuation != null) onCancel.Continuation.CompensateForCancellation = true; continuation.OnCancelled = onCancel.Continuation; jobs.AddRange(onCancel.Jobs); return new ConvertedActivity(continuation, jobs.AsEnumerable()); }