private void CompleteShutdown() { try { if (!IsDisposable) { log.LogInformation("{LogPrefix}Shutting down", logPrefix); SetState(ThreadState.PENDING_SHUTDOWN); IsRunning = false; manager.Close(); consumer.Unsubscribe(); consumer.Close(); consumer.Dispose(); streamMetricsRegistry.RemoveThreadSensors(threadId); log.LogInformation($"{logPrefix}Shutdown complete"); IsDisposable = true; } } catch (Exception e) { log.LogError(e, "{LogPrefix}Failed to close stream thread due to the following error:", logPrefix); } finally { SetState(ThreadState.DEAD); } }