public async Task AutoPublishAndConsume()
        {
            await autoPublisher.StartAsync().ConfigureAwait(false);

            const ulong count = 10000;

            var processReceiptsTask = ProcessReceiptsAsync(autoPublisher, count);
            var publishLettersTask  = PublishLettersAsync(autoPublisher, count);
            var consumeMessagesTask = ConsumeMessagesAsync(consumer, count);

            while (!publishLettersTask.IsCompleted)
            {
                await Task.Delay(1).ConfigureAwait(false);
            }

            while (!processReceiptsTask.IsCompleted)
            {
                await Task.Delay(1).ConfigureAwait(false);
            }

            await autoPublisher.StopAsync().ConfigureAwait(false);

            while (!consumeMessagesTask.IsCompleted)
            {
                await Task.Delay(1).ConfigureAwait(false);
            }

            Assert.True(publishLettersTask.IsCompletedSuccessfully);
            Assert.True(processReceiptsTask.IsCompletedSuccessfully);
            Assert.True(consumeMessagesTask.IsCompletedSuccessfully);
            Assert.False(processReceiptsTask.Result);
            Assert.False(consumeMessagesTask.Result);

            await topologer.DeleteQueueAsync("TestAutoPublisherConsumerQueue").ConfigureAwait(false);
        }
示例#2
0
        public async ValueTask ShutdownAsync(bool immediately)
        {
            await _serviceLock.WaitAsync().ConfigureAwait(false);

            try
            {
                await AutoPublisher
                .StopAsync(immediately)
                .ConfigureAwait(false);

                await StopAllConsumers(immediately)
                .ConfigureAwait(false);

                await ChannelPool
                .ShutdownAsync()
                .ConfigureAwait(false);
            }
            finally
            { _serviceLock.Release(); }
        }