private async Task CloseAsync(Exception e, bool awaitAll) { if (!IsOpen) { return; } foreach (OwnTcpServerConnection connection in connections.ToArray()) { await CloseConnection(connection).ConfigureAwait(false); } isOpen = false; listener.Stop(); await processQueue.End(); Task raiseTask = RaiseDisconnected(); if (awaitAll) { await raiseTask.ConfigureAwait(false); } async Task RaiseDisconnected() { if (openTask != null) { await openTask.ConfigureAwait(false); } if (e != null) { } Disconnected?.Invoke(this, new DisconnectedEventArgs(e == null, e)); } }