public async Task CanDisposeCacheAndQueueAndReceiveSubscribedMessages()
        {
            var muxer       = SharedConnection.GetMuxer();
            var messageBus1 = new RedisMessageBus(new RedisMessageBusOptions {
                Subscriber = muxer.GetSubscriber(), Topic = "test-messages", LoggerFactory = Log
            });

            var cache = new RedisCacheClient(new RedisCacheClientOptions {
                ConnectionMultiplexer = muxer
            });

            Assert.NotNull(cache);

            var queue = new RedisQueue <SimpleWorkItem>(new RedisQueueOptions <SimpleWorkItem> {
                ConnectionMultiplexer = muxer,
                LoggerFactory         = Log
            });

            Assert.NotNull(queue);

            using (messageBus1) {
                using (cache) {
                    using (queue) {
                        await cache.SetAsync("test", "test", TimeSpan.FromSeconds(10));

                        await queue.DequeueAsync(new CancellationToken(true));

                        var countdown = new AsyncCountdownEvent(2);
                        await messageBus1.SubscribeAsync <SimpleMessageA>(msg => {
                            Assert.Equal("Hello", msg.Data);
                            countdown.Signal();
                        });

                        await messageBus1.PublishAsync(new SimpleMessageA { Data = "Hello" });

                        await countdown.WaitAsync(TimeSpan.FromSeconds(2));

                        Assert.Equal(1, countdown.CurrentCount);

                        cache.Dispose();
                        queue.Dispose();

                        await messageBus1.PublishAsync(new SimpleMessageA { Data = "Hello" });

                        await countdown.WaitAsync(TimeSpan.FromSeconds(2));

                        Assert.Equal(0, countdown.CurrentCount);
                    }
                }
            }
        }