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,6 +192,14 @@ public class UDPServer
UDPData? data = null; UDPData? data = null;
var key = $"{ipAddr}-{taskID}"; var key = $"{ipAddr}-{taskID}";
var startTime = DateTime.Now;
var isTimeout = false;
while (!isTimeout)
{
var elapsed = DateTime.Now - startTime;
isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout);
if (isTimeout) break;
try try
{ {
using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout)))
@ -204,6 +212,14 @@ public class UDPServer
sortedList.RemoveAt(0); sortedList.RemoveAt(0);
} }
} }
}
catch
{
logger.Trace("Get nothing even after time out");
return new(null);
}
}
if (data is null) if (data is null)
{ {
@ -215,12 +231,6 @@ public class UDPServer
return new(data.DeepClone()); return new(data.DeepClone());
} }
} }
catch
{
logger.Trace("Get nothing even after time out");
return new(null);
}
}
/// <summary> /// <summary>
/// 异步寻找目标发送的所有内容,并清空队列 /// 异步寻找目标发送的所有内容,并清空队列
@ -234,6 +244,15 @@ public class UDPServer
List<UDPData>? data = null; List<UDPData>? data = null;
var key = $"{ipAddr}-{taskID}"; var key = $"{ipAddr}-{taskID}";
var startTime = DateTime.Now;
var isTimeout = false;
while (!isTimeout)
{
var elapsed = DateTime.Now - startTime;
isTimeout = elapsed >= TimeSpan.FromMilliseconds(timeout);
if (isTimeout) break;
try try
{ {
using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout))) using (await udpDataLock.AcquireWriteLockAsync(TimeSpan.FromMilliseconds(timeout)))
@ -247,6 +266,13 @@ public class UDPServer
} }
} }
}
catch
{
logger.Trace("Get nothing even after time out");
return new(null);
}
}
if (data is null) if (data is null)
{ {
@ -258,13 +284,6 @@ public class UDPServer
return new(data); return new(data);
} }
} }
catch
{
logger.Trace("Get nothing even after time out");
return new(null);
}
}
/// <summary> /// <summary>
/// 获取还未被读取的数据列表 /// 获取还未被读取的数据列表