예제 #1
0
        static Task Connector(ChainFactory factory, TransportMessage message)
        {
            var pipeline = factory.Create();
            var context  = new IncomingContext(message);

            return(pipeline.Invoke(context));
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }
예제 #4
0
 static Task Connector(ChainFactory factory, TransportMessage message)
 {
     var pipeline = factory.Create();
     var context = new IncomingContext(message);
     return pipeline.Invoke(context);
 }