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