public async ValueTask TestSendAsyncOneHandler_10_000_000()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var handler  = new CounterHandler();
            var channel  = new PublishSubscribeChannel(provider);

            channel.Subscribe(handler);
            var message = new GenericMessage("test");

            Assert.True(await channel.SendAsync(message));
            for (var i = 0; i < 10000000; i++)
            {
                await channel.SendAsync(message);
            }

            Assert.Equal(10000001, handler.Count);
        }
        public async ValueTask TestSendAsync()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var handler  = new CounterHandler();
            var channel  = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());

            channel.Subscribe(handler);
            var message = Message.Create("test");

            Assert.True(await channel.SendAsync(message));
            Assert.Equal(1, handler.Count);
        }
        public async ValueTask TestSendAsyncTwoHandler_10_000_000()
        {
            var services = new ServiceCollection();

            services.AddSingleton <IIntegrationServices, IntegrationServices>();
            var provider = services.BuildServiceProvider();
            var handler1 = new CounterHandler();
            var handler2 = new CounterHandler();
            var channel  = new PublishSubscribeChannel(provider.GetService <IApplicationContext>());

            channel.Subscribe(handler1);
            channel.Subscribe(handler2);
            var message = Message.Create("test");

            for (var i = 0; i < 10000000; i++)
            {
                await channel.SendAsync(message);
            }

            Assert.Equal(10000000, handler1.Count);
            Assert.Equal(10000000, handler2.Count);
        }