private void DisposeCore()
{
Debug.Assert(Monitor.IsEntered(StateUpdateLock), $"Expected {nameof(StateUpdateLock)} to be held");
if (!_disposed)
{
_disposed = true;
_keepAliveTimer?.Dispose();
_stream?.Dispose();
if (_state < WebSocketState.Aborted)
{
_state = WebSocketState.Closed;
}
}
}