public async Task StopAsync()
{
tokenSource.Cancel();
await pumpTask.IgnoreCancellation().ConfigureAwait(false);
await Task.WhenAll(runningTasks.Values).ConfigureAwait(false);
runningTasks.Clear();
semaphore.Dispose();
tokenSource.Dispose();
}
}
public async Task Do() { var messages = new ConcurrentQueue<TransportMessage>(); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); messages.Enqueue(new TransportMessage()); var strategy = new PushMessages(messages, maxConcurrency: 1); await strategy.StartAsync(HandleMessage); await countdown.WaitAsync(); await strategy.StopAsync(); }