moonpool/moonpool/Moonpool/Fut/index.html
2023-09-20 15:07:03 -04:00

2 lines
No EOL
32 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Fut (moonpool.Moonpool.Fut)</title><link rel="stylesheet" href="../../../odoc.support/odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 2.2.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../../odoc.support/highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body class="odoc"><nav class="odoc-nav"><a href="../index.html">Up</a> <a href="../../index.html">moonpool</a> &#x00BB; <a href="../index.html">Moonpool</a> &#x00BB; Fut</nav><header class="odoc-preamble"><h1>Module <code><span>Moonpool.Fut</span></code></h1><p>Futures.</p><p>A future of type <code>'a t</code> represents the result of a computation that will yield a value of type <code>'a</code>.</p><p>Typically, the computation is running on a thread pool <a href="../Runner/index.html#type-t"><code>Runner.t</code></a> and will proceed on some worker. Once set, a future cannot change. It either succeeds (storing a <code>Ok x</code> with <code>x: 'a</code>), or fail (storing a <code>Error (exn, bt)</code> with an exception and the corresponding backtrace).</p><p>Combinators such as <a href="#val-map"><code>map</code></a> and <a href="#val-join_array"><code>join_array</code></a> can be used to produce futures from other futures (in a monadic way). Some combinators take a <code>on</code> argument to specify a runner on which the intermediate computation takes place; for example <code>map ~on:pool ~f fut</code> maps the value in <code>fut</code> using function <code>f</code>, applicatively; the call to <code>f</code> happens on the runner <code>pool</code> (once <code>fut</code> resolves successfully with a value).</p></header><nav class="odoc-toc"><ul><li><a href="#combinators">Combinators</a></li><li><a href="#await">Await</a></li><li><a href="#blocking">Blocking</a></li></ul></nav><div class="odoc-content"><div class="odoc-spec"><div class="spec type anchored" id="type-or_error"><a href="#type-or_error" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a or_error</span></span><span> = <span><span>(<span class="type-var">'a</span>, exn * <span class="xref-unresolved">Stdlib</span>.Printexc.raw_backtrace)</span> <span class="xref-unresolved">Stdlib</span>.result</span></span></code></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-t"><a href="#type-t" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a t</span></span></code></div><div class="spec-doc"><p>A future with a result of type <code>'a</code>.</p></div></div><div class="odoc-spec"><div class="spec type anchored" id="type-promise"><a href="#type-promise" class="anchor"></a><code><span><span class="keyword">type</span> <span>'a promise</span></span></code></div><div class="spec-doc"><p>A promise, which can be fulfilled exactly once to set the corresponding future</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-make"><a href="#val-make" class="anchor"></a><code><span><span class="keyword">val</span> make : <span>unit <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span> * <span><span class="type-var">'a</span> <a href="#type-promise">promise</a></span></span></code></div><div class="spec-doc"><p>Make a new future with the associated promise</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-on_result"><a href="#val-on_result" class="anchor"></a><code><span><span class="keyword">val</span> on_result : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p><code>on_result fut f</code> registers <code>f</code> to be called in the future when <code>fut</code> is set ; or calls <code>f</code> immediately if <code>fut</code> is already set.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Already_fulfilled"><a href="#exception-Already_fulfilled" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Already_fulfilled</span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fulfill"><a href="#val-fulfill" class="anchor"></a><code><span><span class="keyword">val</span> fulfill : <span><span><span class="type-var">'a</span> <a href="#type-promise">promise</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Fullfill the promise, setting the future at the same time.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Already_fulfilled</span> <p>if the promise is already fulfilled.</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fulfill_idempotent"><a href="#val-fulfill_idempotent" class="anchor"></a><code><span><span class="keyword">val</span> fulfill_idempotent : <span><span><span class="type-var">'a</span> <a href="#type-promise">promise</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">&#45;&gt;</span></span> unit</span></code></div><div class="spec-doc"><p>Fullfill the promise, setting the future at the same time. Does nothing if the promise is already fulfilled.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-return"><a href="#val-return" class="anchor"></a><code><span><span class="keyword">val</span> return : <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Already settled future, with a result</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-fail"><a href="#val-fail" class="anchor"></a><code><span><span class="keyword">val</span> fail : <span>exn <span class="arrow">&#45;&gt;</span></span> <span><span class="xref-unresolved">Stdlib</span>.Printexc.raw_backtrace <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">_</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Already settled future, with a failure</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-of_result"><a href="#val-of_result" class="anchor"></a><code><span><span class="keyword">val</span> of_result : <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_resolved"><a href="#val-is_resolved" class="anchor"></a><code><span><span class="keyword">val</span> is_resolved : <span><span><span class="type-var">_</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p><code>is_resolved fut</code> is <code>true</code> iff <code>fut</code> is resolved.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-peek"><a href="#val-peek" class="anchor"></a><code><span><span class="keyword">val</span> peek : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> option</span></span></code></div><div class="spec-doc"><p><code>peek fut</code> returns <code>Some r</code> if <code>fut</code> is currently resolved with <code>r</code>, and <code>None</code> if <code>fut</code> is not resolved yet.</p></div></div><div class="odoc-spec"><div class="spec exception anchored" id="exception-Not_ready"><a href="#exception-Not_ready" class="anchor"></a><code><span><span class="keyword">exception</span> </span><span><span class="exception">Not_ready</span></span></code></div><div class="spec-doc"><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_or_fail"><a href="#val-get_or_fail" class="anchor"></a><code><span><span class="keyword">val</span> get_or_fail : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span></span></code></div><div class="spec-doc"><p><code>get_or_fail fut</code> obtains the result from <code>fut</code> if it's fulfilled (i.e. if <code>peek fut</code> returns <code>Some res</code>, <code>get_or_fail fut</code> returns <code>res</code>).</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Not_ready</span> <p>if the future is not ready.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-get_or_fail_exn"><a href="#val-get_or_fail_exn" class="anchor"></a><code><span><span class="keyword">val</span> get_or_fail_exn : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>get_or_fail_exn fut</code> obtains the result from <code>fut</code> if it's fulfilled, like <a href="#val-get_or_fail"><code>get_or_fail</code></a>. If the result is an <code>Error _</code>, the exception inside is re-raised.</p><ul class="at-tags"><li class="raises"><span class="at-tag">raises</span> <span class="value">Not_ready</span> <p>if the future is not ready.</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-is_done"><a href="#val-is_done" class="anchor"></a><code><span><span class="keyword">val</span> is_done : <span><span><span class="type-var">_</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> bool</span></code></div><div class="spec-doc"><p>Is the future resolved? This is the same as <code>peek fut |&gt; Option.is_some</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><h3 id="combinators"><a href="#combinators" class="anchor"></a>Combinators</h3><div class="odoc-spec"><div class="spec value anchored" id="val-spawn"><a href="#val-spawn" class="anchor"></a><code><span><span class="keyword">val</span> spawn : <span>on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>unit <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>spaw ~on f</code> runs <code>f()</code> on the given runner <code>on</code>, and return a future that will hold its result.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-reify_error"><a href="#val-reify_error" class="anchor"></a><code><span><span class="keyword">val</span> reify_error : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>reify_error fut</code> turns a failing future into a non-failing one that contain <code>Error (exn, bt)</code>. A non-failing future returning <code>x</code> is turned into <code>Ok x</code></p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> NEXT_RELEASE</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-map"><a href="#val-map" class="anchor"></a><code><span><span class="keyword">val</span> map : <span>?on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span>f:<span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>map ?on ~f fut</code> returns a new future <code>fut2</code> that resolves with <code>f x</code> if <code>fut</code> resolved with <code>x</code>; and fails with <code>e</code> if <code>fut</code> fails with <code>e</code> or <code>f x</code> raises <code>e</code>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">on</span> <p>if provided, <code>f</code> runs on the given runner</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bind"><a href="#val-bind" class="anchor"></a><code><span><span class="keyword">val</span> bind : <span>?on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span>f:<span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>bind ?on ~f fut</code> returns a new future <code>fut2</code> that resolves like the future <code>f x</code> if <code>fut</code> resolved with <code>x</code>; and fails with <code>e</code> if <code>fut</code> fails with <code>e</code> or <code>f x</code> raises <code>e</code>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">on</span> <p>if provided, <code>f</code> runs on the given runner</p></li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-bind_reify_error"><a href="#val-bind_reify_error" class="anchor"></a><code><span><span class="keyword">val</span> bind_reify_error : <span>?on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span>f:<span>(<span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>bind_reify_error ?on ~f fut</code> returns a new future <code>fut2</code> that resolves like the future <code>f (Ok x)</code> if <code>fut</code> resolved with <code>x</code>; and resolves like the future <code>f (Error (exn, bt))</code> if <code>fut</code> fails with <code>exn</code> and backtrace <code>bt</code>.</p><ul class="at-tags"><li class="parameter"><span class="at-tag">parameter</span> <span class="value">on</span> <p>if provided, <code>f</code> runs on the given runner</p></li></ul><ul class="at-tags"><li class="since"><span class="at-tag">since</span> NEXT_RELEASE</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-join"><a href="#val-join" class="anchor"></a><code><span><span class="keyword">val</span> join : <span>?on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>join fut</code> is <code>fut &gt;&gt;= Fun.id</code>. It joins the inner layer of the future.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-both"><a href="#val-both" class="anchor"></a><code><span><span class="keyword">val</span> both : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>both a b</code> succeeds with <code>x, y</code> if <code>a</code> succeeds with <code>x</code> and <code>b</code> succeeds with <code>y</code>, or fails if any of them fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose"><a href="#val-choose" class="anchor"></a><code><span><span class="keyword">val</span> choose : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span>(<span class="type-var">'a</span>, <span class="type-var">'b</span>)</span> <span class="xref-unresolved">Either</span>.t</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>choose a b</code> succeeds <code>Left x</code> or <code>Right y</code> if <code>a</code> succeeds with <code>x</code> or <code>b</code> succeeds with <code>y</code>, or fails if both of them fails. If they both succeed, it is not specified which result is used.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-choose_same"><a href="#val-choose_same" class="anchor"></a><code><span><span class="keyword">val</span> choose_same : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>choose_same a b</code> succeeds with the value of one of <code>a</code> or <code>b</code> if they succeed, or fails if both fail. If they both succeed, it is not specified which result is used.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-join_array"><a href="#val-join_array" class="anchor"></a><code><span><span class="keyword">val</span> join_array : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> array</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> array</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Wait for all the futures in the array. Fails if any future fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-join_list"><a href="#val-join_list" class="anchor"></a><code><span><span class="keyword">val</span> join_list : <span><span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p>Wait for all the futures in the list. Fails if any future fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_array"><a href="#val-wait_array" class="anchor"></a><code><span><span class="keyword">val</span> wait_array : <span><span><span><span class="type-var">_</span> <a href="#type-t">t</a></span> array</span> <span class="arrow">&#45;&gt;</span></span> <span>unit <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>wait_array arr</code> waits for all futures in <code>arr</code> to resolve. It discards the individual results of futures in <code>arr</code>. It fails if any future fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_list"><a href="#val-wait_list" class="anchor"></a><code><span><span class="keyword">val</span> wait_list : <span><span><span><span class="type-var">_</span> <a href="#type-t">t</a></span> list</span> <span class="arrow">&#45;&gt;</span></span> <span>unit <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>wait_list l</code> waits for all futures in <code>l</code> to resolve. It discards the individual results of futures in <code>l</code>. It fails if any future fails.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for_"><a href="#val-for_" class="anchor"></a><code><span><span class="keyword">val</span> for_ : <span>on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span>int <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>int <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span>unit <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>for_ ~on n f</code> runs <code>f 0</code>, <code>f 1</code>, …, <code>f (n-1)</code> on the runner, and returns a future that resolves when all the tasks have resolved, or fails as soon as one task has failed.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for_array"><a href="#val-for_array" class="anchor"></a><code><span><span class="keyword">val</span> for_array : <span>on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> array</span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span>int <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span>unit <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>for_array ~on arr f</code> runs <code>f 0 arr.(0)</code>, …, <code>f (n-1) arr.(n-1)</code> in the runner (where <code>n = Array.length arr</code>), and returns a future that resolves when all the tasks are done, or fails if any of them fails.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-for_list"><a href="#val-for_list" class="anchor"></a><code><span><span class="keyword">val</span> for_list : <span>on:<a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> unit)</span> <span class="arrow">&#45;&gt;</span></span> <span>unit <a href="#type-t">t</a></span></span></code></div><div class="spec-doc"><p><code>for_list ~on l f</code> is like <code>for_array ~on (Array.of_list l) f</code>.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div><h3 id="await"><a href="#await" class="anchor"></a>Await</h3><p><b>NOTE</b> This is only available on OCaml 5.</p><div class="odoc-spec"><div class="spec value anchored" id="val-await"><a href="#val-await" class="anchor"></a><code><span><span class="keyword">val</span> await : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p><code>await fut</code> suspends the current tasks until <code>fut</code> is fulfilled, then resumes the task on this same runner.</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.3</li></ul><p>This must only be run from inside the runner itself. The runner must support <a href="../Suspend_/index.html"><code>Suspend_</code></a>. <b>NOTE</b>: only on OCaml 5.x</p></div></div><h3 id="blocking"><a href="#blocking" class="anchor"></a>Blocking</h3><div class="odoc-spec"><div class="spec value anchored" id="val-wait_block"><a href="#val-wait_block" class="anchor"></a><code><span><span class="keyword">val</span> wait_block : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span></span></code></div><div class="spec-doc"><p><code>wait_block fut</code> blocks the current thread until <code>fut</code> is resolved, and returns its value.</p><p><b>NOTE</b>: A word of warning: this will monopolize the calling thread until the future resolves. This can also easily cause deadlocks, if enough threads in a pool call <code>wait_block</code> on futures running on the same pool or a pool depending on it.</p><p>A good rule to avoid deadlocks is to run this from outside of any pool, or to have an acyclic order between pools where <code>wait_block</code> is only called from a pool on futures evaluated in a pool that comes lower in the hierarchy. If this rule is broken, it is possible for all threads in a pool to wait for futures that can only make progress on these same threads, hence the deadlock.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-wait_block_exn"><a href="#val-wait_block_exn" class="anchor"></a><code><span><span class="keyword">val</span> wait_block_exn : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'a</span></span></code></div><div class="spec-doc"><p>Same as <a href="#val-wait_block"><code>wait_block</code></a> but re-raises the exception if the future failed.</p></div></div><div class="odoc-spec"><div class="spec module-type anchored" id="module-type-INFIX"><a href="#module-type-INFIX" class="anchor"></a><code><span><span class="keyword">module</span> <span class="keyword">type</span> <a href="module-type-INFIX/index.html">INFIX</a></span><span> = <span class="keyword">sig</span> ... <span class="keyword">end</span></span></code></div></div><div class="odoc-spec"><div class="spec module anchored" id="module-Infix_local"><a href="#module-Infix_local" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Infix_local/index.html">Infix_local</a></span><span> : <a href="module-type-INFIX/index.html">INFIX</a></span></code></div><div class="spec-doc"><p>Operators that run on the same thread as the first future.</p></div></div><div class="odoc-include"><details open="open"><summary class="spec include"><code><span><span class="keyword">include</span> <a href="module-type-INFIX/index.html">INFIX</a></span></code></summary><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;|=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-(&gt;&gt;=)"><a href="#val-(&gt;&gt;=)" class="anchor"></a><code><span><span class="keyword">val</span> (&gt;&gt;=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let+"><a href="#val-let+" class="anchor"></a><code><span><span class="keyword">val</span> let+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span class="type-var">'b</span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and+"><a href="#val-and+" class="anchor"></a><code><span><span class="keyword">val</span> and+ : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-let*"><a href="#val-let*" class="anchor"></a><code><span><span class="keyword">val</span> let* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">&#45;&gt;</span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span></span></code></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-and*"><a href="#val-and*" class="anchor"></a><code><span><span class="keyword">val</span> and* : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">&#45;&gt;</span></span> <span><span>(<span class="type-var">'a</span> * <span class="type-var">'b</span>)</span> <a href="#type-t">t</a></span></span></code></div></div></details></div><div class="odoc-spec"><div class="spec module anchored" id="module-Infix"><a href="#module-Infix" class="anchor"></a><code><span><span class="keyword">module</span> <a href="Infix/index.html">Infix</a></span><span> (<a href="Infix/argument-1-_/index.html">_</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span>) : <a href="module-type-INFIX/index.html">INFIX</a></span></code></div><div class="spec-doc"><p>Make infix combinators, with intermediate computations running on the given pool.</p></div></div><div class="odoc-spec"><div class="spec value anchored" id="val-infix"><a href="#val-infix" class="anchor"></a><code><span><span class="keyword">val</span> infix : <span><a href="../Runner/index.html#type-t">Runner.t</a> <span class="arrow">&#45;&gt;</span></span> <span>(<span class="keyword">module</span> <a href="module-type-INFIX/index.html">INFIX</a>)</span></span></code></div><div class="spec-doc"><p><code>infix runner</code> makes a new infix module with intermediate computations running on the given runner..</p><ul class="at-tags"><li class="since"><span class="at-tag">since</span> 0.2</li></ul></div></div></div></body></html>