Преглед изворни кода

Fix Task that ignores cancellation request

Bond_009 пре 5 година
родитељ
комит
46276acc22
1 измењених фајлова са 9 додато и 2 уклоњено
  1. 9 2
      Emby.Server.Implementations/Udp/UdpServer.cs

+ 9 - 2
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))