package eio
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=3792e912bd8d494bb2e38f73081825e4d212b1970cf2c1f1b2966caa9fd6bc40
sha512=4a80dbcf8cf2663bdad0f2970871844f37bd293c56bd1ce602910e0a613754945f1f942719f9630906453be7c73c1732dc97526c6c90b0b36100d04fd5e871e4
doc/eio/Eio/Promise/index.html
Module Eio.Promise
Source
A promise is a placeholder for result that will arrive in the future.
Unlike lazy values, you cannot "force" promises; a promise is resolved when the maker of the promise is ready.
Promises are thread-safe and so can be shared between domains and used to communicate between them.
Example:
let promise, resolver = Promise.create () in
Fiber.both
(fun () -> traceln "Got %d" (Promise.await promise))
(fun () -> Promise.resolve resolver 42)
An 'a t
is a promise for a value of type 'a
.
An 'a u
is a resolver for a promise of type 'a
.
create ()
is a fresh promise/resolver pair. The promise is initially unresolved.
create_resolved x
is a promise that is already resolved with result x
.
await t
blocks until t
is resolved. If t
is already resolved then this returns immediately.
resolve u v
resolves u
's promise with the value v
. Any threads waiting for the result will be added to the run queue.
try_resolve
is like resolve
but returns false
instead of raising Invalid_argument
.
Returns true
on success.
peek t
is Some v
if the promise has been resolved to v
, or None
otherwise. If the result is None
then it may change in future, otherwise it won't. If another domain has access to the resolver then the state may have already changed by the time this call returns.