fix: 修复删除过多东西导致无法读取数据的问题
This commit is contained in:
		@@ -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());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
@@ -234,36 +244,45 @@ public class UDPServer
 | 
			
		||||
        List<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)))
 | 
			
		||||
                {
 | 
			
		||||
                    data = new List<UDPData>(sortedList.Values);
 | 
			
		||||
                    // 输出数据
 | 
			
		||||
                    // PrintDataArray(data);
 | 
			
		||||
                    sortedList.Clear();
 | 
			
		||||
                    if (udpData.TryGetValue(key, out var sortedList) && sortedList.Count > 0)
 | 
			
		||||
                    {
 | 
			
		||||
                        data = new List<UDPData>(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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// <summary>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user