private async Task DisconnectAsync(Exception ex, bool isReconnecting) { if (State == ConnectionState.Disconnected) { return; } State = ConnectionState.Disconnecting; await _logger.InfoAsync("Disconnecting").ConfigureAwait(false); await _onDisconnecting(ex).ConfigureAwait(false); await _logger.InfoAsync("Disconnected").ConfigureAwait(false); State = ConnectionState.Disconnected; await Disconnected.InvokeAsync(this, new DisconnectedEventArgs(isReconnecting, ex)).ConfigureAwait(false); }
private async Task OnClosed(Exception ex) { if (_isDisconnecting) { return; //Ignore, this disconnect was requested. } await _lock.WaitAsync().ConfigureAwait(false); try { await DisconnectInternalAsync(false).ConfigureAwait(false); } finally { _lock.Release(); } await Disconnected.InvokeAsync(this, new SocketDisconnectedEventArgs(ex)).ConfigureAwait(false); }
/// <summary> /// Triggers the <see cref="Disconnected"/> event asynchronously. /// </summary> /// <param name="eventArgs">the event arguments</param> /// <returns>a task that represents the asynchronously operation.</returns> protected virtual Task OnDisconnectedAsync(DisconnectedEventArgs eventArgs) => Disconnected.InvokeAsync(this, eventArgs);