Development Merge 2025.10.18 #4
@@ -10,22 +10,25 @@ public class Pool<T> : IPool<T>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    private readonly Func<T> generator = null!;
 | 
					    private readonly Func<T> generator = null!;
 | 
				
			||||||
    private readonly Queue<T> queue = new();
 | 
					    private readonly Queue<T> queue = new();
 | 
				
			||||||
 | 
					    private readonly HashSet<T> queuedHashes = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public T Get()
 | 
					    public T Get()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (!queue.TryDequeue(out T? result))
 | 
					        if (!queue.TryDequeue(out T? result))
 | 
				
			||||||
            result = generator();
 | 
					            result = generator();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        queuedHashes.Remove(result);
 | 
				
			||||||
        OnRemoved?.Invoke(this, result);
 | 
					        OnRemoved?.Invoke(this, result);
 | 
				
			||||||
        return result;
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void Return(T item)
 | 
					    public void Return(T item)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if (queue.Contains(item))
 | 
					        if (queuedHashes.Contains(item))
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        queue.Enqueue(item);
 | 
					        queue.Enqueue(item);
 | 
				
			||||||
 | 
					        queuedHashes.Add(item);
 | 
				
			||||||
        OnReturned?.Invoke(this, item);
 | 
					        OnReturned?.Invoke(this, item);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user