Moonpool_fib.FiberFibers.
A fiber is a lightweight computation that runs cooperatively alongside other fibers. In the context of moonpool, fibers have additional properties:
val res : 'a t -> 'a Moonpool.Fut.tFuture result of the fiber.
type 'a callback = 'a Moonpool.Exn_bt.result -> unitCallbacks that are called when a fiber is done.
type cancel_callback = Moonpool.Exn_bt.t -> unitval self : unit -> anyself () is the current fiber. Must be run from inside a fiber.
val peek : 'a t -> 'a Moonpool.Fut.or_error optionPeek inside the future result
val is_done : _ t -> boolHas the fiber completed?
val is_cancelled : _ t -> boolHas the fiber completed with a failure?
val is_success : _ t -> boolHas the fiber completed with a value?
val await : 'a t -> 'aawait fib is like Fut.await (res fib)
val wait_block_exn : 'a t -> 'await_block_exn fib is Fut.wait_block_exn (res fib). NOTE: See Fut.wait_block for warnings about deadlocks.
val wait_block : 'a t -> 'a Moonpool.Fut.or_errorwait_block fib is Fut.wait_block (res fib). NOTE: See Fut.wait_block for warnings about deadlocks.
Check if the current fiber is cancelled, in which case this raises. Must be run from inside a fiber.
val add_on_cancel : _ t -> cancel_callback -> cancel_handleadd_on_cancel fib cb adds cb to the list of cancel callbacks for fib. If fib is already cancelled, cb is called immediately.
val remove_on_cancel : _ t -> cancel_handle -> unitremove_on_cancel fib h removes the cancel callback associated with handle h.
val with_cancel_callback : _ t -> cancel_callback -> (unit -> 'a) -> 'awith_cancel_callback fib cb (fun () -> <e>) evaluates e in a scope in which, if the fiber fib is cancelled, cb() is called. If e returns without the fiber being cancelled, this callback is removed.
val with_self_cancel_callback : cancel_callback -> (unit -> 'a) -> 'awith_self_cancel_callback cb f calls f() in a scope where cb is added to the cancel callbacks of the current fiber
Wait for fiber to be done and call the callback with the result. If the fiber is done already then the callback is invoked immediately with its result.
val spawn_top : on:Moonpool.Runner.t -> (unit -> 'a) -> 'a tspawn_top ~on f spawns a new (toplevel) fiber onto the given runner. This fiber is not the child of any other fiber: its lifetime is only determined by the lifetime of f().
val spawn_link : ?protect:bool -> (unit -> 'a) -> 'a tspawn_link ~protect f spawns a sub-fiber f_child from a running fiber parent. The sub-fiber f_child is attached to the current fiber and fails if the current fiber parent fails.
val spawn_top_or_link :
?protect:bool ->
on:Moonpool.Runner.t ->
(unit -> 'a) ->
'a tspawn_top_or_link ~on ~protect f runs f() in a new fiber. If this is run from inside a fiber, this behaves like spawn_link ~protect f (links to the parent); otherwise it behaves like spawn_top ~on f.