Gets an engine from the pool. This engine should be disposed when you are finished with it. If an engine is free, this method returns immediately with the engine. If no engines are available but we have not reached the maximum number of engines yet, creates a new engine. If the maximum number of engines has been reached, blocks until an engine is available again.
Disposes all engines in this pool, and creates new engines in their place.
Disposes the specified engine and removes it from the pool. A new engine will be created in it's place.