fix: 修复删除过多东西导致无法读取数据的问题
This commit is contained in:
parent
1053d71d29
commit
fb13a5c484
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue