Moonpool_fib
Fibers for moonpool.
See Fiber
for the most important explanations.
module Fiber : sig ... end
Fibers.
module Fls : sig ... end
Fiber-local storage.
module Handle : sig ... end
The unique name of a fiber.
module Main : sig ... end
Main thread.
include module type of struct include Fiber end
type cancel_callback = Moonpool.Exn_bt.t -> unit
A callback used in case of cancellation
type 'a t = 'a Fiber.{Private_}1.t
A fiber returning a value of type 'a
.
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.
Type erased fiber
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.
type cancel_handle = Fiber.cancel_handle
An opaque handle for a single cancel callback in 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.
include module type of struct include Main end
val main : (Moonpool.Runner.t -> 'a) -> 'a
main f
runs f()
in a scope that handles effects, including Fiber.await
.
This scope can run background tasks as well, in a cooperative fashion.