acquire method
Borrow an engine. Blocks (async) if all engines are in use until one is
released, unless timeout elapses.
Implementation
Future<JavascriptRuntime> acquire({Duration? timeout}) async {
if (_disposed) throw StateError('JsEnginePool is disposed');
if (_idle.isNotEmpty) {
final engine = _idle.removeFirst();
_leased.add(engine);
return engine;
}
if (_all.length < maxSize) {
final eng = _create();
_all.add(eng);
_leased.add(eng);
return eng;
}
final c = Completer<JavascriptRuntime>();
_waiters.add(c);
if (timeout != null) {
return c.future.timeout(
timeout,
onTimeout: () {
_waiters.remove(c);
throw TimeoutException('JsEnginePool.acquire', timeout);
},
);
}
return c.future;
}