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); }
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(); } }