diff --git a/src/Discord.Net/Rpc/DiscordRpcClient.cs b/src/Discord.Net/Rpc/DiscordRpcClient.cs index a716b12ea..001b94b7f 100644 --- a/src/Discord.Net/Rpc/DiscordRpcClient.cs +++ b/src/Discord.Net/Rpc/DiscordRpcClient.cs @@ -113,18 +113,19 @@ namespace Discord.Rpc } } /// - public async Task DisconnectAsync() + /// + public Task DisconnectAsync() => DisconnectAsync(null, false); + private async Task DisconnectAsync(Exception ex = null, bool isReconnecting = false) { - await _connectionLock.WaitAsync().ConfigureAwait(false); - try + if (ex == null) { - await DisconnectInternalAsync(null, false).ConfigureAwait(false); + if (_connectTask?.TrySetCanceled() ?? false) return; } - finally { _connectionLock.Release(); } - } - private async Task DisconnectAsync(Exception ex, bool isReconnecting) - { - if (_connectTask?.TrySetException(ex) ?? false) return; + else + { + if (_connectTask?.TrySetException(ex) ?? false) return; + } + await _connectionLock.WaitAsync().ConfigureAwait(false); try { diff --git a/src/Discord.Net/WebSocket/DiscordSocketClient.cs b/src/Discord.Net/WebSocket/DiscordSocketClient.cs index 0dca59214..7a6722f18 100644 --- a/src/Discord.Net/WebSocket/DiscordSocketClient.cs +++ b/src/Discord.Net/WebSocket/DiscordSocketClient.cs @@ -181,19 +181,18 @@ namespace Discord.WebSocket } } /// - public async Task DisconnectAsync() + public Task DisconnectAsync() => DisconnectAsync(null, false); + private async Task DisconnectAsync(Exception ex = null, bool isReconnecting = false) { - if (_connectTask?.TrySetCanceled() ?? false) return; - await _connectionLock.WaitAsync().ConfigureAwait(false); - try + if (ex == null) { - await DisconnectInternalAsync(null, false).ConfigureAwait(false); + if (_connectTask?.TrySetCanceled() ?? false) return; } - finally { _connectionLock.Release(); } - } - private async Task DisconnectAsync(Exception ex, bool isReconnecting) - { - if (_connectTask?.TrySetException(ex) ?? false) return; + else + { + if (_connectTask?.TrySetException(ex) ?? false) return; + } + await _connectionLock.WaitAsync().ConfigureAwait(false); try {