diff options
| author | dkanada <dkanada@users.noreply.github.com> | 2020-06-20 03:04:24 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-20 03:04:24 +0900 |
| commit | e8e5208fbd9484a1b37eed5dece524f108886fe0 (patch) | |
| tree | b1caae97efa052b25b1c4796cf013108aea2ddd8 | |
| parent | 62d86293eba077b864afae837e1f4c5c48ff91e7 (diff) | |
| parent | 46276acc22f4676cbdf83c799a6343e4f9856e57 (diff) | |
Merge pull request #3360 from Bond-009/fix-3359
Fix Task that ignores cancellation request
| -rw-r--r-- | Emby.Server.Implementations/Udp/UdpServer.cs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/Emby.Server.Implementations/Udp/UdpServer.cs b/Emby.Server.Implementations/Udp/UdpServer.cs index bf8a436b4..73fcbcec3 100644 --- a/Emby.Server.Implementations/Udp/UdpServer.cs +++ b/Emby.Server.Implementations/Udp/UdpServer.cs @@ -101,11 +101,18 @@ namespace Emby.Server.Implementations.Udp { while (!cancellationToken.IsCancellationRequested) { + var infiniteTask = Task.Delay(-1, cancellationToken); try { - var result = await _udpSocket.ReceiveFromAsync(_receiveBuffer, SocketFlags.None, _endpoint).ConfigureAwait(false); + var task = _udpSocket.ReceiveFromAsync(_receiveBuffer, SocketFlags.None, _endpoint); + await Task.WhenAny(task, infiniteTask).ConfigureAwait(false); - cancellationToken.ThrowIfCancellationRequested(); + if (!task.IsCompleted) + { + return; + } + + var result = task.Result; var text = Encoding.UTF8.GetString(_receiveBuffer, 0, result.ReceivedBytes); if (text.Contains("who is JellyfinServer?", StringComparison.OrdinalIgnoreCase)) |
