protected override async Task ProtectedProcess(CMMNExecutionContext executionContext, TimerEventListener elt, CancellationToken cancellationToken)
        {
            if (elt.NbOccurrence == 0)
            {
                var subExists = (await SubscriberRepository.Get(executionContext.CasePlanInstance.AggregateId, elt.Id, CMMNConstants.ExternalTransitionNames.Occur, cancellationToken) != null);
                if (!subExists)
                {
                    await Init(executionContext, elt, cancellationToken);

                    return;
                }
            }

            var subscription = await TrySubscribe(executionContext, elt, CMMNConstants.ExternalTransitionNames.Occur, cancellationToken);

            if (subscription.IsCaptured)
            {
                executionContext.CasePlanInstance.MakeTransition(elt, CMMNTransitions.Occur);
            }
        }
        protected override async Task ProtectedProcess(CMMNExecutionContext executionContext, CaseEltInstance elt, CancellationToken cancellationToken)
        {
            if (elt.NbOccurrence == 0)
            {
                var subExists = (await SubscriberRepository.Get(executionContext.Instance.AggregateId, elt.Id, CMMNConstants.ExternalTransitionNames.Occur, cancellationToken) != null);
                if (!subExists)
                {
                    await Init(executionContext, elt, cancellationToken);

                    return;
                }
            }

            var subscription = await TrySubscribe(executionContext, elt, CMMNConstants.ExternalTransitionNames.Occur, cancellationToken);

            if (subscription.IsCaptured)
            {
                var sub = await TryReset(executionContext, elt, CMMNConstants.ExternalTransitionNames.Occur, cancellationToken);

                executionContext.Instance.MakeTransition(elt, CMMNTransitions.Occur, incomingTokens: MergeParameters(executionContext, sub.Parameters));
            }
        }