/// <summary>关闭</summary> /// <param name="reason">关闭原因。便于日志分析</param> /// <returns>是否成功</returns> public virtual Boolean Close(String reason) { if (!Active) { return(true); } lock (this) { if (!Active) { return(true); } // 管道 Pipeline?.Close(CreateContext(this), reason); var rs = true; if (OnClose(reason ?? (GetType().Name + "Close"))) { rs = false; } _RecvCount = 0; // 触发关闭完成的事件 Closed?.Invoke(this, EventArgs.Empty); Active = rs; return(!rs); } }
/// <summary>关闭</summary> /// <param name="reason">关闭原因。便于日志分析</param> /// <returns>是否成功</returns> public virtual Boolean Close(String reason) { if (!Active) { return(true); } lock (this) { if (!Active) { return(true); } using var span = Tracer?.NewSpan($"net:{Name}:Close", Remote); try { // 管道 Pipeline?.Close(CreateContext(this), reason); var rs = true; if (OnClose(reason ?? (GetType().Name + "Close"))) { rs = false; } _RecvCount = 0; // 触发关闭完成的事件 Closed?.Invoke(this, EventArgs.Empty); Active = rs; return(!rs); } catch (Exception ex) { span?.SetError(ex, null); throw; } } }