public void Dispose() { if (_isDisposed) { return; } _isDisposed = true; if (!Consumers.Any()) { Logger.LogDebug($"Disposed consumer pool with no consumers in the pool."); return; } var poolDisposeStopwatch = Stopwatch.StartNew(); Logger.LogInformation($"Disposing consumer pool ({Consumers.Count} consumers)."); var remainingWaitDuration = TotalDisposeWaitDuration; foreach (var consumer in Consumers.Values) { var poolItemDisposeStopwatch = Stopwatch.StartNew(); try { consumer.Value.Unsubscribe(); consumer.Value.Close(); consumer.Value.Dispose(); } catch { } poolItemDisposeStopwatch.Stop(); remainingWaitDuration = remainingWaitDuration > poolItemDisposeStopwatch.Elapsed ? remainingWaitDuration.Subtract(poolItemDisposeStopwatch.Elapsed) : TimeSpan.Zero; } poolDisposeStopwatch.Stop(); Logger.LogInformation( $"Disposed Kafka Consumer Pool ({Consumers.Count} consumers in {poolDisposeStopwatch.Elapsed.TotalMilliseconds:0.00} ms)."); if (poolDisposeStopwatch.Elapsed.TotalSeconds > 5.0) { Logger.LogWarning( $"Disposing Kafka Consumer Pool got time greather than expected: {poolDisposeStopwatch.Elapsed.TotalMilliseconds:0.00} ms."); } Consumers.Clear(); }