|
@@ -113,16 +113,20 @@ namespace Discord.Net.Udp |
|
|
|
|
|
|
|
|
private async Task RunAsync(CancellationToken cancelToken) |
|
|
private async Task RunAsync(CancellationToken cancelToken) |
|
|
{ |
|
|
{ |
|
|
var closeTask = Task.Delay(-1, cancelToken); |
|
|
|
|
|
while (!cancelToken.IsCancellationRequested) |
|
|
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; |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|