From fb13a5c484bc422a02b75bdd0ba873333873ff36 Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Thu, 17 Jul 2025 14:26:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E8=BF=87=E5=A4=9A=E4=B8=9C=E8=A5=BF=E5=AF=BC=E8=87=B4=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=AF=BB=E5=8F=96=E6=95=B0=E6=8D=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/UdpServer.cs | 79 +++++++++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 30 deletions(-) diff --git a/server/src/UdpServer.cs b/server/src/UdpServer.cs index 4705f14..1f62f62 100644 --- a/server/src/UdpServer.cs +++ b/server/src/UdpServer.cs @@ -192,34 +192,44 @@ public class UDPServer UDPData? data = null; var key = $"{ipAddr}-{taskID}"; - try + var startTime = DateTime.Now; + var isTimeout = false; + while (!isTimeout) { - using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) + var elapsed = DateTime.Now - startTime; + isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout); + if (isTimeout) break; + + try { - if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0) + using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) { - // 获取最早的数据(第一个元素) - var firstKey = sortedList.Keys[0]; - data = sortedList[firstKey]; - sortedList.RemoveAt(0); + if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0) + { + // 获取最早的数据(第一个元素) + var firstKey = sortedList.Keys[0]; + data = sortedList[firstKey]; + sortedList.RemoveAt(0); + } } } - - if (data is null) + catch { logger.Trace("Get nothing even after time out"); return new(null); } - else - { - return new(data.DeepClone()); - } } - catch + + + if (data is null) { logger.Trace("Get nothing even after time out"); return new(null); } + else + { + return new(data.DeepClone()); + } } /// @@ -234,36 +244,45 @@ public class UDPServer List? data = null; var key = $"{ipAddr}-{taskID}"; - try + + var startTime = DateTime.Now; + var isTimeout = false; + while (!isTimeout) { - using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) + var elapsed = DateTime.Now - startTime; + isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout); + if (isTimeout) break; + + try { - if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0) + using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) { - data = new List(sortedList.Values); - // 输出数据 - // PrintDataArray(data); - sortedList.Clear(); + if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0) + { + data = new List(sortedList.Values); + // 输出数据 + // PrintDataArray(data); + sortedList.Clear(); + } + } - } - - if (data is null) + catch { logger.Trace("Get nothing even after time out"); return new(null); } - else - { - return new(data); - } } - catch + + if (data is null) { logger.Trace("Get nothing even after time out"); return new(null); } - + else + { + return new(data); + } } ///