fix: 修复删除过多东西导致无法读取数据的问题

This commit is contained in:
SikongJueluo 2025-07-17 14:26:14 +08:00
parent 1053d71d29
commit fb13a5c484
No known key found for this signature in database
1 changed files with 49 additions and 30 deletions

View File

@ -192,34 +192,44 @@ public class UDPServer
UDPData? data = null; UDPData? data = null;
var key = $"{ipAddr}-{taskID}"; 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)))
{ {
// 获取最早的数据(第一个元素) if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0)
var firstKey = sortedList.Keys[0]; {
data = sortedList[firstKey]; // 获取最早的数据(第一个元素)
sortedList.RemoveAt(0); var firstKey = sortedList.Keys[0];
data = sortedList[firstKey];
sortedList.RemoveAt(0);
}
} }
} }
catch
if (data is null)
{ {
logger.Trace("Get nothing even after time out"); logger.Trace("Get nothing even after time out");
return new(null); return new(null);
} }
else
{
return new(data.DeepClone());
}
} }
catch
if (data is null)
{ {
logger.Trace("Get nothing even after time out"); logger.Trace("Get nothing even after time out");
return new(null); return new(null);
} }
else
{
return new(data.DeepClone());
}
} }
/// <summary> /// <summary>
@ -234,36 +244,45 @@ public class UDPServer
List<UDPData>? data = null; List<UDPData>? data = null;
var key = $"{ipAddr}-{taskID}"; 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<UDPData>(sortedList.Values); if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0)
// 输出数据 {
// PrintDataArray(data); data = new List<UDPData>(sortedList.Values);
sortedList.Clear(); // 输出数据
// PrintDataArray(data);
sortedList.Clear();
}
} }
} }
catch
if (data is null)
{ {
logger.Trace("Get nothing even after time out"); logger.Trace("Get nothing even after time out");
return new(null); return new(null);
} }
else
{
return new(data);
}
} }
catch
if (data is null)
{ {
logger.Trace("Get nothing even after time out"); logger.Trace("Get nothing even after time out");
return new(null); return new(null);
} }
else
{
return new(data);
}
} }
/// <summary> /// <summary>