public async Task Stop()
{
cancellationTokenSource.Cancel();
// ReSharper disable once MethodSupportsCancellation
var timeoutTask = Task.Delay(TimeSpan.FromSeconds(30));
var allTasks = runningReceiveTasks.Values.Concat(new[]
{
messagePumpTask
});
var finishedTask = await Task.WhenAny(Task.WhenAll(allTasks), timeoutTask).ConfigureAwait(false);
if (finishedTask.Equals(timeoutTask))
{
Logger.Error("The message pump failed to stop with in the time allowed(30s)");
}
concurrencyLimiter.Dispose();
runningReceiveTasks.Clear();
inputQueue.Dispose();
errorQueue.Dispose();
}