Default object pool implementation.
Pool capacity.
borrow an instance. Pool can recycle an old instance or create a new one
Does pool dispose
Dispose the whole pool. None of borrowed objects could be used after the pool gets disposed otherwise it can result in undefined behaviour
Recycle an instance. Should be recycled what was borrowed before otherwise could fail
Borrows and instance of T from the pool, invokes block with it and finally recycles it