Files
GopherGate/target/doc/tokio/task/struct.JoinHandle.html
2026-02-26 12:00:21 -05:00

191 lines
43 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 lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="An owned permission to join on a task (await its termination)."><title>JoinHandle in tokio::task - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic-ccf7e434.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2"href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-ca0dd0c4.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="tokio" data-themes="" data-resource-suffix="" data-rustdoc-version="1.93.1 (01f6ddf75 2026-02-11) (Arch Linux rust 1:1.93.1-1)" data-channel="1.93.1" data-search-js="search-9e2438ea.js" data-stringdex-js="stringdex-a3946164.js" data-settings-js="settings-c38705f0.js" ><script src="../../static.files/storage-e2aeef58.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-a410ff4d.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-263c88ec.css"></noscript><link rel="alternate icon" type="image/png" href="../../static.files/favicon-32x32-eab170b8.png"><link rel="icon" type="image/svg+xml" href="../../static.files/favicon-044be391.svg"></head><body class="rustdoc struct"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><rustdoc-topbar><h2><a href="#">JoinHandle</a></h2></rustdoc-topbar><nav class="sidebar"><div class="sidebar-crate"><h2><a href="../../tokio/index.html">tokio</a><span class="version">1.49.0</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Join<wbr>Handle</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#cancel-safety" title="Cancel safety">Cancel safety</a></li><li><a href="#examples" title="Examples">Examples</a></li></ul><h3><a href="#implementations">Methods</a></h3><ul class="block method"><li><a href="#method.abort" title="abort">abort</a></li><li><a href="#method.abort_handle" title="abort_handle">abort_handle</a></li><li><a href="#method.id" title="id">id</a></li><li><a href="#method.is_finished" title="is_finished">is_finished</a></li></ul><h3><a href="#trait-implementations">Trait Implementations</a></h3><ul class="block trait-implementation"><li><a href="#impl-Debug-for-JoinHandle%3CT%3E" title="Debug">Debug</a></li><li><a href="#impl-Drop-for-JoinHandle%3CT%3E" title="Drop">Drop</a></li><li><a href="#impl-Future-for-JoinHandle%3CT%3E" title="Future">Future</a></li><li><a href="#impl-RefUnwindSafe-for-JoinHandle%3CT%3E" title="RefUnwindSafe">RefUnwindSafe</a></li><li><a href="#impl-Send-for-JoinHandle%3CT%3E" title="Send">Send</a></li><li><a href="#impl-Sync-for-JoinHandle%3CT%3E" title="Sync">Sync</a></li><li><a href="#impl-Unpin-for-JoinHandle%3CT%3E" title="Unpin">Unpin</a></li><li><a href="#impl-UnwindSafe-for-JoinHandle%3CT%3E" title="UnwindSafe">UnwindSafe</a></li></ul><h3><a href="#synthetic-implementations">Auto Trait Implementations</a></h3><ul class="block synthetic-implementation"><li><a href="#impl-Freeze-for-JoinHandle%3CT%3E" title="Freeze">Freeze</a></li></ul><h3><a href="#blanket-implementations">Blanket Implementations</a></h3><ul class="block blanket-implementation"><li><a href="#impl-Any-for-T" title="Any">Any</a></li><li><a href="#impl-Borrow%3CT%3E-for-T" title="Borrow&#60;T&#62;">Borrow&#60;T&#62;</a></li><li><a href="#impl-BorrowMut%3CT%3E-for-T" title="BorrowMut&#60;T&#62;">BorrowMut&#60;T&#62;</a></li><li><a href="#impl-From%3CT%3E-for-T" title="From&#60;T&#62;">From&#60;T&#62;</a></li><li><a href="#impl-Into%3CU%3E-for-T" title="Into&#60;U&#62;">Into&#60;U&#62;</a></li><li><a href="#impl-IntoFuture-for-F" title="IntoFuture">IntoFuture</a></li><li><a href="#impl-TryFrom%3CU%3E-for-T" title="TryFrom&#60;U&#62;">TryFrom&#60;U&#62;</a></li><li><a href="#impl-TryInto%3CU%3E-for-T" title="TryInto&#60;U&#62;">TryInto&#60;U&#62;</a></li></ul></section><div id="rustdoc-modnav"><h2><a href="index.html">In tokio::<wbr>task</a></h2></div></div></nav><div class="sidebar-resizer" title="Drag to resize sidebar"></div><main><div class="width-limiter"><section id="main-content" class="content"><div class="main-heading"><div class="rustdoc-breadcrumbs"><a href="../index.html">tokio</a>::<wbr><a href="index.html">task</a></div><h1>Struct <span class="struct">Join<wbr>Handle</span>&nbsp;<button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../src/tokio/runtime/task/join.rs.html#159-162">Source</a> </span></div><pre class="rust item-decl"><code>pub struct JoinHandle&lt;T&gt; { <span class="comment">/* private fields */</span> }</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>An owned permission to join on a task (await its termination).</p>
<p>This can be thought of as the equivalent of <a href="https://doc.rust-lang.org/1.93.1/std/thread/join_handle/struct.JoinHandle.html" title="struct std::thread::join_handle::JoinHandle"><code>std::thread::JoinHandle</code></a>
for a Tokio task rather than a thread. Note that the background task
associated with this <code>JoinHandle</code> started running immediately when you
called spawn, even if you have not yet awaited the <code>JoinHandle</code>.</p>
<p>A <code>JoinHandle</code> <em>detaches</em> the associated task when it is dropped, which
means that there is no longer any handle to the task, and no way to <code>join</code>
on it.</p>
<p>This <code>struct</code> is created by the <a href="fn.spawn.html" title="fn tokio::task::spawn"><code>task::spawn</code></a> and <a href="fn.spawn_blocking.html" title="fn tokio::task::spawn_blocking"><code>task::spawn_blocking</code></a>
functions.</p>
<h2 id="cancel-safety"><a class="doc-anchor" href="#cancel-safety">§</a>Cancel safety</h2>
<p>The <code>&amp;mut JoinHandle&lt;T&gt;</code> type is cancel safe. If it is used as the event
in a <code>tokio::select!</code> statement and some other branch completes first,
then it is guaranteed that the output of the task is not lost.</p>
<p>If a <code>JoinHandle</code> is dropped, then the task continues running in the
background and its return value is lost.</p>
<h2 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h2>
<p>Creation from <a href="fn.spawn.html" title="fn tokio::task::spawn"><code>task::spawn</code></a>:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">let </span>join_handle: task::JoinHandle&lt;<span class="kw">_</span>&gt; = task::spawn(<span class="kw">async </span>{
<span class="comment">// some work here
</span>});</code></pre></div>
<p>Creation from <a href="fn.spawn_blocking.html" title="fn tokio::task::spawn_blocking"><code>task::spawn_blocking</code></a>:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">let </span>join_handle: task::JoinHandle&lt;<span class="kw">_</span>&gt; = task::spawn_blocking(|| {
<span class="comment">// some blocking work here
</span>});</code></pre></div>
<p>The generic parameter <code>T</code> in <code>JoinHandle&lt;T&gt;</code> is the return type of the spawned task.
If the return value is an <code>i32</code>, the join handle has type <code>JoinHandle&lt;i32&gt;</code>:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">let </span>join_handle: task::JoinHandle&lt;i32&gt; = task::spawn(<span class="kw">async </span>{
<span class="number">5 </span>+ <span class="number">3
</span>});
</code></pre></div>
<p>If the task does not have a return value, the join handle has type <code>JoinHandle&lt;()&gt;</code>:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">let </span>join_handle: task::JoinHandle&lt;()&gt; = task::spawn(<span class="kw">async </span>{
<span class="macro">println!</span>(<span class="string">"I return nothing."</span>);
});</code></pre></div>
<p>Note that <code>handle.await</code> doesnt give you the return type directly. It is wrapped in a
<code>Result</code> because panics in the spawned task are caught by Tokio. The <code>?</code> operator has
to be double chained to extract the returned value:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">use </span>std::io;
<span class="kw">let </span>join_handle: task::JoinHandle&lt;<span class="prelude-ty">Result</span>&lt;i32, io::Error&gt;&gt; = tokio::spawn(<span class="kw">async </span>{
<span class="prelude-val">Ok</span>(<span class="number">5 </span>+ <span class="number">3</span>)
});
<span class="kw">let </span>result = join_handle.<span class="kw">await</span><span class="question-mark">??</span>;
<span class="macro">assert_eq!</span>(result, <span class="number">8</span>);
<span class="prelude-val">Ok</span>(())</code></pre></div>
<p>If the task panics, the error is a <a href="struct.JoinError.html" title="struct tokio::task::JoinError"><code>JoinError</code></a> that contains the panic:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">use </span>std::io;
<span class="kw">use </span>std::panic;
<span class="attr">#[tokio::main]
</span><span class="kw">async fn </span>main() -&gt; io::Result&lt;()&gt; {
<span class="kw">let </span>join_handle: task::JoinHandle&lt;<span class="prelude-ty">Result</span>&lt;i32, io::Error&gt;&gt; = tokio::spawn(<span class="kw">async </span>{
<span class="macro">panic!</span>(<span class="string">"boom"</span>);
});
<span class="kw">let </span>err = join_handle.<span class="kw">await</span>.unwrap_err();
<span class="macro">assert!</span>(err.is_panic());
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
<p>Child being detached and outliving its parent:</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::task;
<span class="kw">use </span>tokio::time;
<span class="kw">use </span>std::time::Duration;
<span class="kw">let </span>original_task = task::spawn(<span class="kw">async </span>{
<span class="kw">let </span>_detached_task = task::spawn(<span class="kw">async </span>{
<span class="comment">// Here we sleep to make sure that the first task returns before.
</span>time::sleep(Duration::from_millis(<span class="number">10</span>)).<span class="kw">await</span>;
<span class="comment">// This will be called, even though the JoinHandle is dropped.
</span><span class="macro">println!</span>(<span class="string">"♫ Still alive ♫"</span>);
});
});
original_task.<span class="kw">await</span>.expect(<span class="string">"The task being joined has panicked"</span>);
<span class="macro">println!</span>(<span class="string">"Original task is joined."</span>);
<span class="comment">// We make sure that the new task has time to run, before the main
// task returns.
</span>time::sleep(Duration::from_millis(<span class="number">1000</span>)).<span class="kw">await</span>;</code></pre></div></div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#171-316">Source</a><a href="#impl-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.abort" class="method"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#223-225">Source</a><h4 class="code-header">pub fn <a href="#method.abort" class="fn">abort</a>(&amp;self)</h4></section></summary><div class="docblock"><p>Abort the task associated with the handle.</p>
<p>Awaiting a cancelled task might complete as usual if the task was
already completed at the time it was cancelled, but most likely it
will fail with a <a href="struct.JoinError.html#method.is_cancelled" title="method tokio::task::JoinError::is_cancelled">cancelled</a> <code>JoinError</code>.</p>
<p>Be aware that tasks spawned using <a href="fn.spawn_blocking.html" title="fn tokio::task::spawn_blocking"><code>spawn_blocking</code></a> cannot be aborted
because they are not async. If you call <code>abort</code> on a <code>spawn_blocking</code>
task, then this <em>will not have any effect</em>, and the task will continue
running normally. The exception is if the task has not started running
yet; in that case, calling <code>abort</code> may prevent the task from starting.</p>
<p>See also <a href="index.html#cancellation" title="mod tokio::task">the module level docs</a> for more information on cancellation.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::time;
<span class="kw">let </span><span class="kw-2">mut </span>handles = Vec::new();
handles.push(tokio::spawn(<span class="kw">async </span>{
time::sleep(time::Duration::from_secs(<span class="number">10</span>)).<span class="kw">await</span>;
<span class="bool-val">true
</span>}));
handles.push(tokio::spawn(<span class="kw">async </span>{
time::sleep(time::Duration::from_secs(<span class="number">10</span>)).<span class="kw">await</span>;
<span class="bool-val">false
</span>}));
<span class="kw">for </span>handle <span class="kw">in </span><span class="kw-2">&amp;</span>handles {
handle.abort();
}
<span class="kw">for </span>handle <span class="kw">in </span>handles {
<span class="macro">assert!</span>(handle.<span class="kw">await</span>.unwrap_err().is_cancelled());
}</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.is_finished" class="method"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#254-257">Source</a><h4 class="code-header">pub fn <a href="#method.is_finished" class="fn">is_finished</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.93.1/std/primitive.bool.html">bool</a></h4></section></summary><div class="docblock"><p>Checks if the task associated with this <code>JoinHandle</code> has finished.</p>
<p>Please note that this method can return <code>false</code> even if <a href="struct.JoinHandle.html#method.abort" title="method tokio::task::JoinHandle::abort"><code>abort</code></a> has been
called on the task. This is because the cancellation process may take
some time, and this method does not return <code>true</code> until it has
completed.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::time;
<span class="kw">let </span>handle1 = tokio::spawn(<span class="kw">async </span>{
<span class="comment">// do some stuff here
</span>});
<span class="kw">let </span>handle2 = tokio::spawn(<span class="kw">async </span>{
<span class="comment">// do some other stuff here
</span>time::sleep(time::Duration::from_secs(<span class="number">10</span>)).<span class="kw">await</span>;
});
<span class="comment">// Wait for the task to finish
</span>handle2.abort();
time::sleep(time::Duration::from_secs(<span class="number">1</span>)).<span class="kw">await</span>;
<span class="macro">assert!</span>(handle1.is_finished());
<span class="macro">assert!</span>(handle2.is_finished());</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.abort_handle" class="method"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#303-306">Source</a><h4 class="code-header">pub fn <a href="#method.abort_handle" class="fn">abort_handle</a>(&amp;self) -&gt; <a class="struct" href="struct.AbortHandle.html" title="struct tokio::task::AbortHandle">AbortHandle</a></h4></section></summary><div class="docblock"><p>Returns a new <code>AbortHandle</code> that can be used to remotely abort this task.</p>
<p>Awaiting a task cancelled by the <code>AbortHandle</code> might complete as usual if the task was
already completed at the time it was cancelled, but most likely it
will fail with a <a href="struct.JoinError.html#method.is_cancelled" title="method tokio::task::JoinError::is_cancelled">cancelled</a> <code>JoinError</code>.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>tokio::{time, task};
<span class="kw">let </span><span class="kw-2">mut </span>handles = Vec::new();
handles.push(tokio::spawn(<span class="kw">async </span>{
time::sleep(time::Duration::from_secs(<span class="number">10</span>)).<span class="kw">await</span>;
<span class="bool-val">true
</span>}));
handles.push(tokio::spawn(<span class="kw">async </span>{
time::sleep(time::Duration::from_secs(<span class="number">10</span>)).<span class="kw">await</span>;
<span class="bool-val">false
</span>}));
<span class="kw">let </span>abort_handles: Vec&lt;task::AbortHandle&gt; = handles.iter().map(|h| h.abort_handle()).collect();
<span class="kw">for </span>handle <span class="kw">in </span>abort_handles {
handle.abort();
}
<span class="kw">for </span>handle <span class="kw">in </span>handles {
<span class="macro">assert!</span>(handle.<span class="kw">await</span>.unwrap_err().is_cancelled());
}</code></pre></div></div></details><details class="toggle method-toggle" open><summary><section id="method.id" class="method"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#312-315">Source</a><h4 class="code-header">pub fn <a href="#method.id" class="fn">id</a>(&amp;self) -&gt; <a class="struct" href="struct.Id.html" title="struct tokio::task::Id">Id</a></h4></section></summary><div class="docblock"><p>Returns a <a href="struct.Id.html" title="struct tokio::task::Id">task ID</a> that uniquely identifies this task relative to other
currently spawned tasks.</p>
</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#363-373">Source</a><a href="#impl-Debug-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;<div class="where">where
T: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html" title="trait core::fmt::Debug">Debug</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.fmt" class="method trait-impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#367-372">Source</a><a href="#method.fmt" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html#tymethod.fmt" class="fn">fmt</a>(&amp;self, fmt: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/fmt/struct.Formatter.html" title="struct core::fmt::Formatter">Formatter</a>&lt;'_&gt;) -&gt; <a class="type" href="https://doc.rust-lang.org/1.93.1/core/fmt/type.Result.html" title="type core::fmt::Result">Result</a></h4></section></summary><div class='docblock'>Formats the value using the given formatter. <a href="https://doc.rust-lang.org/1.93.1/core/fmt/trait.Debug.html#tymethod.fmt">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Drop-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#353-361">Source</a><a href="#impl-Drop-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/ops/drop/trait.Drop.html" title="trait core::ops::drop::Drop">Drop</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.drop" class="method trait-impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#354-360">Source</a><a href="#method.drop" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/ops/drop/trait.Drop.html#tymethod.drop" class="fn">drop</a>(&amp;mut self)</h4></section></summary><div class='docblock'>Executes the destructor for this type. <a href="https://doc.rust-lang.org/1.93.1/core/ops/drop/trait.Drop.html#tymethod.drop">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Future-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#320-351">Source</a><a href="#impl-Future-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output" class="associatedtype trait-impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#321">Source</a><a href="#associatedtype.Output" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html#associatedtype.Output" class="associatedtype">Output</a> = <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, <a class="struct" href="struct.JoinError.html" title="struct tokio::task::JoinError">JoinError</a>&gt;</h4></section></summary><div class='docblock'>The type of value produced on completion.</div></details><details class="toggle method-toggle" open><summary><section id="method.poll" class="method trait-impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#323-350">Source</a><a href="#method.poll" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html#tymethod.poll" class="fn">poll</a>(self: <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;&amp;mut Self&gt;, cx: &amp;mut <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/task/wake/struct.Context.html" title="struct core::task::wake::Context">Context</a>&lt;'_&gt;) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/task/poll/enum.Poll.html" title="enum core::task::poll::Poll">Poll</a>&lt;Self::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a>&gt;</h4></section></summary><div class='docblock'>Attempts to resolve the future to a final value, registering
the current task for wakeup if the value is not yet available. <a href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html#tymethod.poll">Read more</a></div></details></div></details><section id="impl-RefUnwindSafe-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#169">Source</a><a href="#impl-RefUnwindSafe-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.RefUnwindSafe.html" title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section><section id="impl-Send-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#165">Source</a><a href="#impl-Send-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section><section id="impl-Sync-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#166">Source</a><a href="#impl-Sync-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a>&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Sync.html" title="trait core::marker::Sync">Sync</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section><section id="impl-Unpin-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#318">Source</a><a href="#impl-Unpin-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Unpin.html" title="trait core::marker::Unpin">Unpin</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section><section id="impl-UnwindSafe-for-JoinHandle%3CT%3E" class="impl"><a class="src rightside" href="../../src/tokio/runtime/task/join.rs.html#168">Source</a><a href="#impl-UnwindSafe-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/panic/unwind_safe/trait.UnwindSafe.html" title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section></div><h2 id="synthetic-implementations" class="section-header">Auto Trait Implementations<a href="#synthetic-implementations" class="anchor">§</a></h2><div id="synthetic-implementations-list"><section id="impl-Freeze-for-JoinHandle%3CT%3E" class="impl"><a href="#impl-Freeze-for-JoinHandle%3CT%3E" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Freeze.html" title="trait core::marker::Freeze">Freeze</a> for <a class="struct" href="struct.JoinHandle.html" title="struct tokio::task::JoinHandle">JoinHandle</a>&lt;T&gt;</h3></section></div><h2 id="blanket-implementations" class="section-header">Blanket Implementations<a href="#blanket-implementations" class="anchor">§</a></h2><div id="blanket-implementations-list"><details class="toggle implementors-toggle"><summary><section id="impl-Any-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/any.rs.html#138">Source</a><a href="#impl-Any-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/any/trait.Any.html" title="trait core::any::Any">Any</a> for T<div class="where">where
T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/any/trait.Any.html#tymethod.type_id" class="fn">type_id</a>(&amp;self) -&gt; <a class="struct" href="https://doc.rust-lang.org/1.93.1/core/any/struct.TypeId.html" title="struct core::any::TypeId">TypeId</a></h4></section></summary><div class='docblock'>Gets the <code>TypeId</code> of <code>self</code>. <a href="https://doc.rust-lang.org/1.93.1/core/any/trait.Any.html#tymethod.type_id">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Borrow%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/borrow.rs.html#212">Source</a><a href="#impl-Borrow%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.Borrow.html" title="trait core::borrow::Borrow">Borrow</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/borrow.rs.html#214">Source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.Borrow.html#tymethod.borrow" class="fn">borrow</a>(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.93.1/std/primitive.reference.html">&amp;T</a></h4></section></summary><div class='docblock'>Immutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-BorrowMut%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/borrow.rs.html#221">Source</a><a href="#impl-BorrowMut%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.BorrowMut.html" title="trait core::borrow::BorrowMut">BorrowMut</a>&lt;T&gt; for T<div class="where">where
T: ?<a class="trait" href="https://doc.rust-lang.org/1.93.1/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/borrow.rs.html#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut" class="fn">borrow_mut</a>(&amp;mut self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.93.1/std/primitive.reference.html">&amp;mut T</a></h4></section></summary><div class='docblock'>Mutably borrows from an owned value. <a href="https://doc.rust-lang.org/1.93.1/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-From%3CT%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#785">Source</a><a href="#impl-From%3CT%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for T</h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#788">Source</a><a href="#method.from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.From.html#tymethod.from" class="fn">from</a>(t: T) -&gt; T</h4></section></summary><div class="docblock"><p>Returns the argument unchanged.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-Into%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#767-769">Source</a><a href="#impl-Into%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#777">Source</a><a href="#method.into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.Into.html#tymethod.into" class="fn">into</a>(self) -&gt; U</h4></section></summary><div class="docblock"><p>Calls <code>U::from(self)</code>.</p>
<p>That is, this conversion is whatever the implementation of
<code><a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.From.html" title="trait core::convert::From">From</a>&lt;T&gt; for U</code> chooses to do.</p>
</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-IntoFuture-for-F" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/future/into_future.rs.html#138">Source</a><a href="#impl-IntoFuture-for-F" class="anchor">§</a><h3 class="code-header">impl&lt;F&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html" title="trait core::future::into_future::IntoFuture">IntoFuture</a> for F<div class="where">where
F: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Output-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/future/into_future.rs.html#139">Source</a><a href="#associatedtype.Output-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html#associatedtype.Output" class="associatedtype">Output</a> = &lt;F as <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/future/future/trait.Future.html#associatedtype.Output" title="type core::future::future::Future::Output">Output</a></h4></section></summary><div class='docblock'>The output that the future will produce on completion.</div></details><details class="toggle" open><summary><section id="associatedtype.IntoFuture" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/future/into_future.rs.html#140">Source</a><a href="#associatedtype.IntoFuture" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html#associatedtype.IntoFuture" class="associatedtype">IntoFuture</a> = F</h4></section></summary><div class='docblock'>Which kind of future are we turning this into?</div></details><details class="toggle method-toggle" open><summary><section id="method.into_future" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/future/into_future.rs.html#142">Source</a><a href="#method.into_future" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html#tymethod.into_future" class="fn">into_future</a>(self) -&gt; &lt;F as <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html" title="trait core::future::into_future::IntoFuture">IntoFuture</a>&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html#associatedtype.IntoFuture" title="type core::future::into_future::IntoFuture::IntoFuture">IntoFuture</a></h4></section></summary><div class='docblock'>Creates a future from a value. <a href="https://doc.rust-lang.org/1.93.1/core/future/into_future/trait.IntoFuture.html#tymethod.into_future">Read more</a></div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#827-829">Source</a><a href="#impl-TryFrom%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#831">Source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html#associatedtype.Error" class="associatedtype">Error</a> = <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/convert/enum.Infallible.html" title="enum core::convert::Infallible">Infallible</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_from" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#834">Source</a><a href="#method.try_from" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html#tymethod.try_from" class="fn">try_from</a>(value: U) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;T, &lt;T as <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;U&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryInto%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#811-813">Source</a><a href="#impl-TryInto%3CU%3E-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T, U&gt; <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryInto.html" title="trait core::convert::TryInto">TryInto</a>&lt;U&gt; for T<div class="where">where
U: <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#815">Source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="code-header">type <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryInto.html#associatedtype.Error" class="associatedtype">Error</a> = &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a></h4></section></summary><div class='docblock'>The type returned in the event of a conversion error.</div></details><details class="toggle method-toggle" open><summary><section id="method.try_into" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/1.93.1/src/core/convert/mod.rs.html#818">Source</a><a href="#method.try_into" class="anchor">§</a><h4 class="code-header">fn <a href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryInto.html#tymethod.try_into" class="fn">try_into</a>(self) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.93.1/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;U, &lt;U as <a class="trait" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;&gt;::<a class="associatedtype" href="https://doc.rust-lang.org/1.93.1/core/convert/trait.TryFrom.html#associatedtype.Error" title="type core::convert::TryFrom::Error">Error</a>&gt;</h4></section></summary><div class='docblock'>Performs the conversion.</div></details></div></details></div></section></div></main></body></html>