Moonpool_fib.Fiber
Fibers.
A fiber is a lightweight computation that runs cooperatively alongside other fibers. In the context of moonpool, fibers have additional properties:
type cancel_callback = Moonpool.Exn_bt.t -> unit
A callback used in case of cancellation
val res : 'a t -> 'a Moonpool.Fut.t
Future result of the fiber.
type 'a callback = 'a Moonpool.Exn_bt.result -> unit
Callbacks that are called when a fiber is done.
val return : 'a -> 'a t
val fail : Moonpool.Exn_bt.t -> _ t
val self : unit -> any
self ()
is the current fiber. Must be run from inside a fiber.
val peek : 'a t -> 'a Moonpool.Fut.or_error option
Peek inside the future result
val is_done : _ t -> bool
Has the fiber completed?
val is_cancelled : _ t -> bool
Has the fiber completed with a failure?
val is_success : _ t -> bool
Has the fiber completed with a value?
val await : 'a t -> 'a
await fib
is like Fut.await (res fib)
val wait_block_exn : 'a t -> 'a
wait_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_error
wait_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_handle
add_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 -> unit
remove_on_cancel fib h
removes the cancel callback associated with handle h
.
val with_on_cancel : _ t -> cancel_callback -> (unit -> 'a) -> 'a
with_on_cancel 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_on_self_cancel : cancel_callback -> (unit -> 'a) -> 'a
with_on_self_cancel cb f
calls f()
in a scope where cb
is added to the cancel callbacks of the current fiber; and f()
terminates, cb
is removed from the list.
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 t
spawn_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 : ?on:Moonpool.Runner.t -> ?protect:bool -> (unit -> 'a) -> 'a t
spawn ~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_ignore :
?on:Moonpool.Runner.t ->
?protect:bool ->
(unit -> _) ->
unit
spawn_ignore f
is ignore (spawn f)
. The fiber will still affect termination of the parent, ie. the parent will exit only after this new fiber exits.
val spawn_top_ignore : on:Moonpool.Runner.t -> (unit -> _) -> unit
Like spawn_top
but ignores the result.