Beispiel #1
0
        public ProductionPointUC(ISequencerTaskRegister taskRegister,
                                 ISequencerExceptionRegister exceptionRegister,
                                 SeqPointTypeUC seqPointType,
                                 object productionArg = null,
                                 Action <object> injectContinuation = null)
        {
            SeqPointType      = seqPointType;
            ProductionArg     = productionArg;
            TaskRegister      = taskRegister;
            ExceptionRegister = exceptionRegister;

            if (SeqPointType == SeqPointTypeUC.Match)
            {
                InjectContinuation = injectContinuation;
                ExecutionContext   = InjectContinuation != null?ExecutionContext.Capture() : null;

                SynchronizationContext = InjectContinuation != null ? SynchronizationContext.Current : null;
                TaskScheduler          = InjectContinuation != null && SynchronizationContext == null ? TaskScheduler.Current : null;
                return;
            }

            if (SeqPointType == SeqPointTypeUC.Notify)
            {
                Complete();
            }

            exceptionRegister.Token.Register(OnCancel);
        }
Beispiel #2
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
                );
        }
Beispiel #3
0
 ProductionPoint(ISequencerTaskRegister taskRegister,
                 ISequencerExceptionRegister exceptionRegister,
                 SeqPointTypeUC seqPointTypeUC,
                 object arg = null,
                 Action <object> injectContinuation = null)
 => SequencerStrategy.ProductionPoint(taskRegister, exceptionRegister, seqPointTypeUC, arg, injectContinuation)
 ;
 void PointArg <TEnum, TArg>(ISequencerUC sequencer,
                             SeqPointTypeUC seqPointTypeUC,
                             TEnum registration,
                             TArg arg,
                             Action <object> injectContinuation = null)
     where TEnum : struct
 {
     sequencer?.Point(seqPointTypeUC, registration, arg, injectContinuation);
 }
 void Point <TEnum>(ISequencerUC sequencer,
                    Func <bool> condition,
                    SeqPointTypeUC seqPointTypeUC,
                    TEnum registration,
                    object arg = null,
                    Action <object> injectContinuation = null)
     where TEnum : struct
 {
     sequencer?.Point(seqPointTypeUC, registration, condition, arg, injectContinuation);
 }
        void PointArg <TEnum, TArg>(this  ISequencerUC sequencer,
                                    SeqPointTypeUC seqPointTypeUC,
                                    TEnum registration,
                                    TArg arg,
                                    Action <object> injectContinuation = null)
            where TEnum : struct
        {
            var rslt = sequencer.PointAsyncArg <TEnum, TArg>(seqPointTypeUC, registration, arg, injectContinuation);

            rslt.GetResult();            //sync waiting unless completed awaiter was provided
        }
        void Point <TEnum>(this  ISequencerUC sequencer,
                           SeqPointTypeUC seqPointTypeUC,
                           TEnum registration,
                           Func <bool> condition,
                           object arg = null,
                           Action <object> injectContinuation = null)
            where TEnum : struct
        {
            var rslt = sequencer.PointAsync(seqPointTypeUC, registration, condition, arg, injectContinuation);

            rslt.GetResult();            //sync waiting unless completed awaiter was provided
        }
Beispiel #8
0
 PointAsyncArg <TEnum, TArg>(this  ISequencerUC sequencer,
                             SeqPointTypeUC seqPointTypeUC,
                             TEnum registration,
                             TArg arg,
                             Action <object> injectContinuation = null)
     where TEnum : struct
 {
     return
         (sequencer
          .PointAsyncArg(seqPointTypeUC,
                         registration,
                         () => true,
                         arg,
                         injectContinuation)
         );
 }
 PointAsync <TEnum>(this  ISequencerUC sequencer,
                    SeqPointTypeUC seqPointTypeUC,
                    TEnum registration,
                    object arg = null,
                    Action <object> injectContinuation = null)
     where TEnum : struct
 {
     return
         (sequencer
          .PointAsync(seqPointTypeUC,
                      registration,
                      Constants.Boolean.FuncReturnTrue,
                      arg,
                      injectContinuation)
         );
 }
        ProductionPoint(ISequencerTaskRegister taskRegister,
                        ISequencerExceptionRegister exceptionRegister,
                        SeqPointTypeUC seqPointTypeUC,
                        object arg = null,
                        Action <object> injectContinuation = null)
        {
            ProductionPointUC  productionPoint = new ProductionPointUC(taskRegister, exceptionRegister, seqPointTypeUC, arg, injectContinuation);
            IProductionPointUC productionMatch = null;
            ITestPointUC       testMatch       = null;

            using (Lock.Enter())
            {
                ProductionPointQueue.Enqueue(productionPoint);
                if (ProductionPointQueue.Count > 0 && TestPointQueue.Count > 0)
                {
                    productionMatch = ProductionPointQueue.Dequeue();
                    testMatch       = TestPointQueue.Dequeue();
                }
            }
            testMatch?.Complete(productionMatch);
            return(productionPoint);
        }