public bool SetFlag() { while (true) { var v = _value; var vNew = (v & 0x7FFFFFFE) + 1; if (v == vNew) return false; if (Interlocked.CompareExchange(ref _value, vNew, v) == v) return vNew == 1; } }
public void Close() { if (_issueCountFlag.Flag) { return; } if (_closeReason == 0) { _closeReason = 1; } if (_logger != null) { _logger.Trace("Close connection"); } if (_socket != null) { _socket.Close(); } if (_issueCountFlag.SetFlag()) { ProcessClose(); } }