mirror of
https://github.com/c-cube/moonpool.git
synced 2026-01-27 03:34:50 -05:00
2 lines
No EOL
32 KiB
HTML
2 lines
No EOL
32 KiB
HTML
<!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> » <a href="../index.html">Moonpool</a> » 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">-></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">-></span></span> <span><span>(<span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-or_error">or_error</a></span> <span class="arrow">-></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">-></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">-></span></span> <span><span class="xref-unresolved">Stdlib</span>.Printexc.raw_backtrace <span class="arrow">-></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">-></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">-></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">-></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">-></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">-></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">-></span></span> bool</span></code></div><div class="spec-doc"><p>Is the future resolved? This is the same as <code>peek fut |> 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">-></span></span> <span><span>(<span>unit <span class="arrow">-></span></span> <span class="type-var">'a</span>)</span> <span class="arrow">-></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">-></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">-></span></span> <span>f:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></span></span> <span>f:<span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></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">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></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">-></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 >>= 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">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></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">-></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">-></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">-></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">-></span></span> <span>int <span class="arrow">-></span></span> <span><span>(<span>int <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> array</span> <span class="arrow">-></span></span> <span><span>(<span>int <span class="arrow">-></span></span> <span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'a</span> list</span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> unit)</span> <span class="arrow">-></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">-></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">-></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">-></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-(>|=)"><a href="#val-(>|=)" class="anchor"></a><code><span><span class="keyword">val</span> (>|=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></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-(>>=)"><a href="#val-(>>=)" class="anchor"></a><code><span><span class="keyword">val</span> (>>=) : <span><span><span class="type-var">'a</span> <a href="#type-t">t</a></span> <span class="arrow">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></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">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span class="type-var">'b</span>)</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></span></span> <span><span>(<span><span class="type-var">'a</span> <span class="arrow">-></span></span> <span><span class="type-var">'b</span> <a href="#type-t">t</a></span>)</span> <span class="arrow">-></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">-></span></span> <span><span><span class="type-var">'b</span> <a href="#type-t">t</a></span> <span class="arrow">-></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">-></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> |