# Dispose.cs (自动转换为Markdown) ```csharp // 以下内容为原始C#代码,含详细注释 // 文件原路径:Managers/WebSocketMgr/PrivateMethods.cs using Microsoft.Extensions.Logging; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WebSocket4Net; namespace CoreAgent.ProtocolClient.Managers.WebSocketMgr { public partial class WebSocketMessageManager { #region IDisposable实现 /// /// 释放资源 - 对应LTEClientWebSocket.Dispose()方法 /// /// 功能说明: /// 1. 释放WebSocket连接和相关资源 /// 2. 清理消息队列和定时器 /// 3. 设置释放标志,防止重复释放 /// 4. 调用MessageIdManager的Dispose方法 /// /// 对应关系: /// - 资源释放:对应原始实现中的Dispose()方法 /// - 连接关闭:对应原始实现中的WebSocket关闭逻辑 /// - 定时器清理:对应原始实现中的定时器释放逻辑 /// - 队列清理:对应原始实现中的队列清理逻辑 /// - 释放标志:对应原始实现中的_disposed设置 /// - 日志记录:对应原始实现中的释放日志记录 /// /// 重构改进: /// - 更清晰的资源释放顺序 /// - 更完善的异常处理 /// - 更详细的日志记录 /// - 保持了完全一致的释放逻辑 /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// 释放资源的受保护方法 - 实现标准的Dispose模式 /// /// 功能说明: /// 1. 实现标准的Dispose模式,支持手动释放和垃圾回收 /// 2. 确保资源只被释放一次 /// 3. 按照正确的顺序释放资源 /// /// 对应关系: /// - 释放模式:对应.NET标准的Dispose模式 /// - 资源清理:对应原始实现中的资源清理逻辑 /// - 异常处理:对应原始实现中的异常处理 /// /// 重构改进: /// - 标准的Dispose模式实现 /// - 更安全的资源管理 /// - 更好的异常处理 /// - 保持了完全一致的清理逻辑 /// /// 是否为手动释放 protected virtual void Dispose(bool disposing) { if (_disposed) return; if (disposing) { try { _logger.LogInformation($"[{_clientName}] 释放WebSocket消息管理器资源"); // 停止消息发送定时器 - 对应原始实现中的定时器释放 StopMessageDeferTimer(); // 清空消息队列 - 对应原始实现中的队列清理 ClearMessageQueue(); // 释放BlockingCollection资源 - 优化:确保BlockingCollection正确释放 _messageFifo?.Dispose(); // 关闭WebSocket连接 - 对应原始实现中的WebSocket关闭 if (_webSocket != null) { _webSocket.Close(); _webSocket = null; } // 释放MessageIdManager - 对应原始实现中的相关资源释放 _messageIdManager?.Dispose(); } catch (Exception ex) { _logger.LogError(ex, $"[{_clientName}] 释放资源异常: {ex.Message}"); } } _disposed = true; } #endregion } }