Imandrakit_thread.Fiber
include module type of struct include Moonpool_fib end
module Fiber = Moonpool_fib.Fiber
module Fls = Moonpool_fib.Fls
module Handle = Moonpool_fib.Handle
module Main = Moonpool_fib.Main
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 Moonpool_fib.{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 = Moonpool_fib.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.
module FLS = Moonpool_fib.Fls
val get_rcontext : unit -> Hmap.t
Access the current rcontext
val get_from_rcontext : 'a Hmap.key -> 'a0 option
val add_to_rcontext : 'a Hmap.key -> 'a0 -> unit
Add some k/v to the context
val spawn_top_and_return_fut :
on:Moonpool.Runner.t ->
(unit -> 'a) ->
'a0 Fut.t
An easy starting point to mimic future-returning APIs
val spawn_and_return_fut : ?on:Moonpool.Runner.t -> (unit -> 'a) -> 'a0 Fut.t
val spawn_top_and_ignore : on:Moonpool.Runner.t -> (unit -> 'a) -> unit
val pp : (Imandrakit.Fmt.t -> 'a -> unit) -> Imandrakit.Fmt.t -> 'b t -> unit