static Task Connector(ChainFactory factory, TransportMessage message) { var pipeline = factory.Create(); var context = new IncomingContext(message); return(pipeline.Invoke(context)); }
public async Task Do() { var messages = new ConcurrentQueue <TransportMessage>(); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); var countdown = new AsyncCountdownEvent(3); var chainFactory = new ChainFactory(); chainFactory.Register(() => new LogElement(countdown)); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayInUsing()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new DelayInUsing()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new ThrowException()); var pushMessages = new PushMessages(messages, maxConcurrency: 1); await pushMessages.StartAsync(tm => Connector(chainFactory, tm)); await Task.Delay(2000); await pushMessages.StopAsync(); }
public async Task Do() { var messages = new ConcurrentQueue<TransportMessage>(); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); var countdown = new AsyncCountdownEvent(3); var chainFactory = new ChainFactory(); chainFactory.Register(() => new LogElement(countdown)); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayInUsing()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new DelayInUsing()); chainFactory.Register(() => new DelayBefore()); chainFactory.Register(() => new DelayAfter()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new PassThrough()); chainFactory.Register(() => new ThrowException()); var pushMessages = new PushMessages(messages, maxConcurrency: 1); await pushMessages.StartAsync(tm => Connector(chainFactory, tm)); await Task.Delay(2000); await pushMessages.StopAsync(); }
static Task Connector(ChainFactory factory, TransportMessage message) { var pipeline = factory.Create(); var context = new IncomingContext(message); return pipeline.Invoke(context); }