diff --git a/ManagedPool/Pool_T_.cs b/ManagedPool/Pool_T_.cs
index 7da4466..663a6fd 100644
--- a/ManagedPool/Pool_T_.cs
+++ b/ManagedPool/Pool_T_.cs
@@ -40,35 +40,6 @@ namespace eu.railduction.netcore.dll.ManagedPool
/// If more items are in the pool that the buffer, it will delete/kill the overflowing items
public int DecreaseBuffer { get => decreaseBuffer; set => decreaseBuffer = value; }
- ///
- /// Creates a managed pool
- /// Will automatically spawn items
- ///
- /// The minimum amount of items in the pool
- /// The maximum amount of items in the pool
- /// Amount if items being spawned at a time if needed
- /// If less items are in the pool than the , it will spawn -amount
- /// If more items are in the pool than the , it will delete/kill the overflowing items
- /// Method to handle item-spawning (needs to return the item-type)
- /// Method to handle item-deleting/killing (needs to take the item-type as parameter)
- public Pool(int min, int max, int batch, int increaseBuffer, int decreaseBuffer, Func creator, Action destructor)
- {
- this.min = min;
- this.max = max;
- this.batch = batch;
- this.increaseBuffer = increaseBuffer;
- this.decreaseBuffer = decreaseBuffer;
-
- // Validate objects state
- validate();
-
- this.creator = creator;
- this.destructor = destructor;
-
- // Create the minimum amount of objects
- Task.Run(() => createNewObjects(min));
- }
-
///
/// Creates a managed pool
/// Will automatically spawn items
@@ -83,7 +54,7 @@ namespace eu.railduction.netcore.dll.ManagedPool
/// Method to handle item-deleting/killing
/// Method to handle item-health-checking (useful for unstable items)
/// While running the health-check, the Thread will be blocked!
- public Pool(int min, int max, int batch, int increaseBuffer, int decreaseBuffer, Func creator, Action destructor, Func healthChecker)
+ public Pool(int min, int max, int batch, int increaseBuffer, int decreaseBuffer, Func creator, Action destructor = null, Func healthChecker = null)
{
this.min = min;
this.max = max;
@@ -109,6 +80,7 @@ namespace eu.railduction.netcore.dll.ManagedPool
if (batch <= 0) throw new InvalidOperationException($"Invalid parameter batch='{batch}'. Must be at least '1'!");
if (increaseBuffer <= 0) throw new InvalidOperationException($"Invalid parameter increaseBuffer='{increaseBuffer}'. Must be at least '1'!");
if (decreaseBuffer <= 0) throw new InvalidOperationException($"Invalid parameter decreaseBuffer='{decreaseBuffer}'. Must be at least '1'!");
+ if(creator == null) throw new InvalidOperationException($"Invalid parameter creator. Cannot be null!");
}
///
@@ -133,7 +105,11 @@ namespace eu.railduction.netcore.dll.ManagedPool
if (popped)
{
- if (healthChecker(item)) // Check for item-health
+ // Only run healthChecker if its set
+ bool healthy = true;
+ if (healthChecker != null) healthy = healthChecker(item);
+
+ if (healthy) // Check for item-health
{
return item; // Item is healthy, return it
}
@@ -218,8 +194,8 @@ namespace eu.railduction.netcore.dll.ManagedPool
{
// decrease counter
current--;
- // Destruct it
- destructor(item);
+ // Destruct it when we have a descructor (otherwise the garbage-collector will take care)
+ if(destructor != null) destructor(item);
}
///