public async Task AwaitAlreadyEnqueuedDataTest() { ISequencerUC sequencer = SequencerUC .Construct() .Register(AwaitAlreadyEnqueuedDataEnum.Enqueue2ItemsBegin, new StrategyOneOnOneUC()) .Register(AwaitAlreadyEnqueuedDataEnum.Enqueue2ItemsEnd, new StrategyOneOnOneUC()) .Register(AwaitAlreadyEnqueuedDataEnum.EnqueuedItemsAsyncBegin, new StrategyOneOnOneUC()) .Register(AwaitAlreadyEnqueuedDataEnum.EnqueuedItemsAsyncEnd, new StrategyOneOnOneUC()) ; const int throttle = 3; IConcurrentQueueNotifier <string> notifier = new ConcurrentQueueNotifier <string>(throttle); sequencer.Run(() => Insert2Items(sequencer, notifier)); sequencer.Run(() => AwaitEnqueuedData(sequencer, notifier)); await sequencer.TestPointCompleteAsync(AwaitAlreadyEnqueuedDataEnum.Enqueue2ItemsBegin); //enqueue data await sequencer.TestPointCompleteAsync(AwaitAlreadyEnqueuedDataEnum.Enqueue2ItemsEnd); //enqueue completed Assert.AreEqual(2, notifier.Count()); await sequencer.TestPointCompleteAsync(AwaitAlreadyEnqueuedDataEnum.EnqueuedItemsAsyncBegin); //begin awaiting enqueued data await sequencer.TestPointCompleteAsync(AwaitAlreadyEnqueuedDataEnum.EnqueuedItemsAsyncEnd); //enqueued data should be detected await sequencer.WhenAll(); sequencer.TryReThrowException(); }
public async Task Insert3ItemsThrottleTest() { ISequencerUC sequencer = SequencerUC .Construct() .Register(Insert3ItemsThrottleTestEnum.Enqueue3Items_Begin, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.Enqueue3Items_A, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.Enqueue3Items_B, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.Enqueue3Items_C_Throttle, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.Enqueue3Items_End, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncBegin, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncDataItem, new StrategyOneOnOneUC()) .Register(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncEnd, new StrategyOneOnOneUC()) ; const int throttle = 3; IConcurrentQueueNotifier <string> notifier = new ConcurrentQueueNotifier <string>(throttle); sequencer.Run(() => Insert3ItemsThrottle(sequencer, notifier)); sequencer.Run(() => AwaitDequeue3(sequencer, notifier)); IProductionPointUC prodPoint; await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.Enqueue3Items_Begin); await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.Enqueue3Items_A); await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.Enqueue3Items_B); prodPoint = await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.Enqueue3Items_C_Throttle); Assert.IsFalse((prodPoint?.ProductionArg as Task)?.IsCompleted); Assert.AreEqual(3, notifier.Count()); await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncBegin); prodPoint = await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncDataItem); Assert.AreEqual("A", prodPoint?.ProductionArg as string); //throttling should be deactivated, resuming await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.Enqueue3Items_End); prodPoint = await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncDataItem); Assert.AreEqual("B", prodPoint?.ProductionArg as string); prodPoint = await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncDataItem); Assert.AreEqual("C", prodPoint?.ProductionArg as string); await sequencer.TestPointCompleteAsync(Insert3ItemsThrottleTestEnum.EnqueuedItemsAsyncEnd); await sequencer.WhenAll(); sequencer.TryReThrowException(); }
public async Task AwaitAheadOfDataTest() { ISequencerUC sequencer = SequencerUC .Construct() .Register(AwaitAheadOfDataEnum.Enqueue2ItemsBegin, new StrategyOneOnOneUC()) .Register(AwaitAheadOfDataEnum.Enqueue2ItemsA, new StrategyOneOnOneUC()) .Register(AwaitAheadOfDataEnum.Enqueue2ItemsEnd, new StrategyOneOnOneUC()) .Register(AwaitAheadOfDataEnum.EnqueuedItemsAsyncBegin, new StrategyOneOnOneUC()) .Register(AwaitAheadOfDataEnum.EnqueuedItemsAsyncAwaiting, new StrategyOneOnOneUC()) .Register(AwaitAheadOfDataEnum.EnqueuedItemsAsyncEnd, new StrategyOneOnOneUC()) ; const int throttle = 3; IConcurrentQueueNotifier <string> notifier = new ConcurrentQueueNotifier <string>(throttle); sequencer.Run(() => Enque2Items(sequencer, notifier)); sequencer.Run(() => AwaitAhedOfData(sequencer, notifier)); await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.EnqueuedItemsAsyncBegin); IProductionPointUC point = await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.EnqueuedItemsAsyncAwaiting); Task t = point.ProductionArg as Task; Assert.IsFalse(t?.IsCompleted); await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.Enqueue2ItemsBegin); await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.Enqueue2ItemsA); await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.EnqueuedItemsAsyncEnd); await sequencer.TestPointCompleteAsync(AwaitAheadOfDataEnum.Enqueue2ItemsEnd); Assert.AreEqual(1, notifier.Count()); await sequencer.WhenAll(); sequencer.TryReThrowException(); }