diff --git a/src/Discord.Net/DiscordClient.cs b/src/Discord.Net/DiscordClient.cs index 59a949e87..49d560080 100644 --- a/src/Discord.Net/DiscordClient.cs +++ b/src/Discord.Net/DiscordClient.cs @@ -66,7 +66,7 @@ namespace Discord /// Initializes a new instance of the DiscordClient class. public DiscordClient(DiscordClientConfig config = null) { - _blockEvent = new ManualResetEventSlim(false); + _blockEvent = new ManualResetEventSlim(true); _config = config ?? new DiscordClientConfig(); _rand = new Random(); @@ -278,7 +278,7 @@ namespace Discord _webSocket = new DiscordWebSocket(_config.WebSocketInterval); _webSocket.Connected += (s, e) => RaiseConnected(); - _webSocket.Disconnected += async (s, e) => + _webSocket.Disconnected += async (s, e) => { //Reconnect if we didn't cause the disconnect RaiseDisconnected(); @@ -869,13 +869,6 @@ namespace Discord { await _webSocket.DisconnectAsync(); - //Do not clean up until all tasks have ended - _webSocket.Dispose(); - _webSocket = null; - _blockEvent.Dispose(); - _blockEvent = null; - _tasks = null; - //Clear send queue Message ignored; while (_pendingMessages.TryDequeue(out ignored)) { } @@ -885,7 +878,10 @@ namespace Discord _roles.Clear(); _servers.Clear(); _users.Clear(); - }); + + _blockEvent.Set(); + _tasks = null; + }).Unwrap(); _isConnected = true; } else @@ -895,10 +891,11 @@ namespace Discord /// Disconnects from the Discord server, canceling any pending requests. public async Task Disconnect() { - _blockEvent.Set(); - if (_tasks != null) - await _tasks; + { + try { _disconnectToken.Cancel(); } catch (NullReferenceException) { } + try { await _tasks; } catch (NullReferenceException) { } + } } //Servers diff --git a/src/Discord.Net/DiscordWebSocket.cs b/src/Discord.Net/DiscordWebSocket.cs index 81b6f868a..bbce2c0c3 100644 --- a/src/Discord.Net/DiscordWebSocket.cs +++ b/src/Discord.Net/DiscordWebSocket.cs @@ -58,7 +58,6 @@ namespace Discord _webSocket = null; _disconnectToken.Dispose(); _disconnectToken = null; - _tasks = null; //Clear send queue byte[] ignored; @@ -69,6 +68,8 @@ namespace Discord _isConnected = false; RaiseDisconnected(); } + + _tasks = null; }); if (autoLogin) @@ -109,8 +110,8 @@ namespace Discord { if (_tasks != null) { - _disconnectToken.Cancel(); - await _tasks; + try { _disconnectToken.Cancel(); } catch (NullReferenceException) { } + try { await _tasks; } catch (NullReferenceException) { } } }