Module Ask_pool

Pools of reusable resources.

This can be used for pooling database connections in multithreaded programs.


type ('a, 'b) t

The type for pools of reusable resources of type 'a whose life-cycle management returns errors of type 'b.

val create : create:(unit -> ('a'b) Stdlib.result) -> dispose:('a -> (unit, 'b) Stdlib.result) -> int -> ('a'b) t

create ~create ~dispose limit is a pool with at most limit reusable ressources created with create. dispose is only called when dispose is; in particular it is not called when the pool is garbage collected.

val with' : ('a'b) t -> ('a -> 'c) -> ('c'b) Stdlib.result

with' p f blocks the calling thread until a resource r can be reused or created in the limit given to create. Returns Ok (f r) and releases the ressource r back to the pool for reuse (even if f raises). Error _ is returned in case the resource r had to be created and it errored.

val try_with : ('a'b) t -> ('a -> 'c) -> ('c'b) Stdlib.result option

try_with is like with' but if no ressource can be reused or created in the limit given to create the function returns immediately with None.

val dispose : ('a'b) t -> (unit, 'b list) Stdlib.result

dispose p disposes the ressources of p that are not currently used. Ressources that are currently held by with' or try_with calls are not disposed. p can still be used afterwards new ressources will be created as needed in the limits given to create.