From 9b02155a40fbe0d8ddf7b7df460f888707e7ec24 Mon Sep 17 00:00:00 2001 From: ComputerMaster1st Date: Mon, 25 Jun 2018 20:08:51 +0100 Subject: [PATCH] RunAsync now catches UdpClient ObjectDisposedException & breaks --- .../Net/DefaultUdpSocket.cs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/Discord.Net.WebSocket/Net/DefaultUdpSocket.cs b/src/Discord.Net.WebSocket/Net/DefaultUdpSocket.cs index 251a761d4..cdf485fd2 100644 --- a/src/Discord.Net.WebSocket/Net/DefaultUdpSocket.cs +++ b/src/Discord.Net.WebSocket/Net/DefaultUdpSocket.cs @@ -113,16 +113,20 @@ namespace Discord.Net.Udp private async Task RunAsync(CancellationToken cancelToken) { - var closeTask = Task.Delay(-1, cancelToken); while (!cancelToken.IsCancellationRequested) { - var receiveTask = _udp.ReceiveAsync(); - var task = await Task.WhenAny(closeTask, receiveTask).ConfigureAwait(false); - if (task == closeTask) - break; + try + { + var result = await _udp.ReceiveAsync() + .ConfigureAwait(false); - var result = receiveTask.Result; - await ReceivedDatagram(result.Buffer, 0, result.Buffer.Length).ConfigureAwait(false); + await ReceivedDatagram(result.Buffer, 0, result.Buffer.Length).ConfigureAwait(false); + } + catch (ObjectDisposedException) + { + //if we get this the UDP socket has been closed (by dispose, so it has been cancelled) + break; + } } } }