예제 #1
0
        PointAsyncArg <TEnum, TArg>(this  ISequencerUC sequencer,
                                    SeqPointTypeUC seqPointTypeUC,
                                    TEnum registration,
                                    Func <bool> condition,
                                    TArg arg,
                                    Action <object> injectContinuation = null)
            where TEnum : struct
        {
            SequencerRegisterUC register = sequencer as SequencerRegisterUC;

            if (register == null || condition == null || !condition())
            {
                return(CompletedAwaiter);
            }

            ISequencerExceptionRegister exceptionRegister = register.ExceptionRegister.TryReThrowException();
            ISequencerTaskRegister      taskRegister      = register.TaskRegister;

            ISequencerPointUC <TEnum> seqPoint = register.TryGet(registration);

            return
                (seqPoint?.ProductionPoint(taskRegister, exceptionRegister, seqPointTypeUC, arg, injectContinuation)
                 ?? CompletedAwaiter
                );
        }
        public void Add <TEnum>(ISequencerPointUC <TEnum> sequencerPoint) where TEnum : struct
        {
            if (sequencerPoint == null)
            {
                throw new ArgumentNullException(nameof(sequencerPoint));
            }

            SequencerEventMapperUC <TEnum> .TestEnum();

            ISequencerEventMapperUC enumValueMapper =
                Mapper
                .AddOrUpdate(SequencerEventMapperUC <TEnum> .GenericInterfaceType,
                             //Add - multiple can be created, one is going to win
                             type => new SequencerEventMapperUC <TEnum>(),
                             //Update, keep existing unless it is null,
                             //multiple can be created, one is going to win
                             (type, previous) => previous ?? new SequencerEventMapperUC <TEnum>())
            ;

            ISequencerEventMapperUC <TEnum>
            genericEnumValueMapper = (ISequencerEventMapperUC <TEnum>)enumValueMapper
            ;

            genericEnumValueMapper.Add(sequencerPoint.Registration, sequencerPoint);
        }
예제 #3
0
 public void Add(TEnum enumValue, ISequencerPointUC <TEnum> sequencerPoint)
 {
     if (Mapper.TryAdd(enumValue, sequencerPoint))
     {
         return;
     }
     throw new ArgumentException($"{nameof(TEnum)}.{enumValue} has been already registered!");
 }
        Register <TEnum>(this    ISequencerUC sequencer,
                         ISequencerPointUC <TEnum> sequencerPoint)
            where TEnum : struct
        {
            SequencerRegisterUC register = sequencer as SequencerRegisterUC;

            if (register == null)
            {
                return(sequencer);
            }

            register.ExceptionRegister.TryReThrowException();
            register.Add(sequencerPoint);

            return(sequencer);
        }
예제 #5
0
        TestPointAsync <TEnum>(this ISequencerUC sequencer, TEnum registration)
            where TEnum : struct
        {
            if (!(sequencer is SequencerRegisterUC register))
            {
                return(TestPointUC.EmptyCompleted);
            }

            ISequencerExceptionRegister exceptionRegister = register.ExceptionRegister.TryReThrowException();
            ISequencerTaskRegister      taskRegister      = register.TaskRegister;

            ISequencerPointUC <TEnum> seqPoint = register.TryGet(registration);

            return
                (seqPoint?.TestPoint(taskRegister, exceptionRegister) ??
                 TestPointUC.EmptyCompleted
                );
        }
예제 #6
0
 public void Add <TEnum>(ISequencerPointUC <TEnum> sequencerPoint) where TEnum : struct
 {
     EventRegister.Add(sequencerPoint);
 }