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) { }
}
}