This module controls the ``main-loop'' of Lwt.
val run : 'a Lwt.t -> 'a
Lwt_main.run p calls the Lwt scheduler, performing I/O until
Lwt_main.run p returns the value in
p is fulfilled. If
p is rejected with an exception instead,
Lwt_main.run p raises that exception.
Every native and bytecode program that uses Lwt should call this function at its top level. It implements the Lwt main loop.
let main () = Lwt_io.write_line Lwt_io.stdout "hello world" let () = Lwt_main.run (main ())
On Unix, calling
Lwt_main.run installs a
SIGCHLD handler, which is needed for the implementations of
Lwt_unix.wait4. As a result, programs that call
Lwt_main.run and also use non-Lwt system calls need to handle those system calls failing with
Nested calls to
Lwt_main.run are not allowed. That is, do not call
Lwt_main.run in a callback triggered by a promise that is resolved by an outer invocation of
Lwt_main.run. If your program makes such a call,
Lwt_main.run will raise
Failure. This should be considered a logic error (i.e., code making such a call is inherently broken).
It is not safe to call
Lwt_main.run in a function registered with
val yield : unit -> unit Lwt.t
yield () is a pending promise that is fulfilled after Lwt finishes calling all currently ready callbacks, i.e. it is fulfilled on the next “tick.”
yield is now deprecated in favor of the more general
yield is phased out, this function will be deprecated as well.
This is meant for use with
Lwt_unix.fork, as a way to “abandon” more promise chains that are pending in your process.
module type Hooks = sig ... end
Hooks, of type
unit -> unit, that are called before each iteration of the Lwt main loop.
Hooks, of type
unit -> unit, that are called after each iteration of the Lwt main loop.
Promise-returning hooks, of type
unit -> unit Lwt.t, that are called at process exit. Exceptions raised by these hooks are ignored.
val enter_iter_hooks : ( unit -> unit ) Lwt_sequence.t
val leave_iter_hooks : ( unit -> unit ) Lwt_sequence.t
val at_exit : ( unit -> unit Lwt.t ) -> unit
Lwt_main.at_exit hook is the same as
ignore (Lwt_main.Exit_hooks.add_first hook).