100 lines
12 KiB
HTML
100 lines
12 KiB
HTML
<!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="API documentation for the Rust `time` mod in crate `tokio`."><meta name="keywords" content="rust, rustlang, rust-lang, time"><title>tokio::time - Rust</title><link rel="stylesheet" type="text/css" href="../../normalize.css"><link rel="stylesheet" type="text/css" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" type="text/css" href="../../light.css" id="themeStyle"><link rel="stylesheet" type="text/css" href="../../dark.css" disabled ><link rel="stylesheet" type="text/css" href="../../ayu.css" disabled ><script id="default-settings"></script><script src="../../storage.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="icon" type="image/svg+xml" href="../../favicon.svg">
|
||
<link rel="alternate icon" type="image/png" href="../../favicon-16x16.png">
|
||
<link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><style type="text/css">#crate-search{background-image:url("../../down-arrow.svg");}</style></head><body class="rustdoc mod"><!--[if lte IE 8]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="sidebar"><div class="sidebar-menu">☰</div><a href='../../tokio/index.html'><div class='logo-container rust-logo'><img src='../../rust-logo.png' alt='logo'></div></a><p class="location">Module time</p><div class="sidebar-elems"><div class="block items"><ul><li><a href="#reexports">Re-exports</a></li><li><a href="#modules">Modules</a></li><li><a href="#structs">Structs</a></li><li><a href="#functions">Functions</a></li></ul></div><p class="location"><a href="../index.html">tokio</a></p><script>window.sidebarCurrent = {name: "time", ty: "mod", relpath: "../"};</script><script defer src="../sidebar-items.js"></script></div></nav><div class="theme-picker"><button id="theme-picker" aria-label="Pick another theme!" aria-haspopup="menu"><img src="../../brush.svg" width="18" alt="Pick another theme!"></button><div id="theme-choices" role="menu"></div></div><script src="../../theme.js"></script><nav class="sub"><form class="search-form"><div class="search-container"><div><select id="crate-search"><option value="All crates">All crates</option></select><input class="search-input" name="search" disabled autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"></div><span class="help-button">?</span>
|
||
<a id="settings-menu" href="../../settings.html"><img src="../../wheel.svg" width="18" alt="Change settings"></a></div></form></nav><section id="main" class="content"><h1 class="fqn"><span class="out-of-band"><span id="render-detail"><a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">−</span>]</a></span><a class="srclink" href="../../src/tokio/time/mod.rs.html#1-119" title="goto source code">[src]</a></span><span class="in-band">Module <a href="../index.html">tokio</a>::<wbr><a class="mod" href="">time</a></span></h1><div class="docblock"><p>Utilities for tracking time.</p>
|
||
<p>This module provides a number of types for executing code after a set period
|
||
of time.</p>
|
||
<ul>
|
||
<li>
|
||
<p><code>Sleep</code> is a future that does no work and completes at a specific <code>Instant</code>
|
||
in time.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Interval</code> is a stream yielding a value at a fixed period. It is
|
||
initialized with a <code>Duration</code> and repeatedly yields each time the duration
|
||
elapses.</p>
|
||
</li>
|
||
<li>
|
||
<p><code>Timeout</code>: Wraps a future or stream, setting an upper bound to the amount
|
||
of time it is allowed to execute. If the future or stream does not
|
||
complete in time, then it is canceled and an error is returned.</p>
|
||
</li>
|
||
</ul>
|
||
<p>These types are sufficient for handling a large number of scenarios
|
||
involving time.</p>
|
||
<p>These types must be used from within the context of the <code>Runtime</code>.</p>
|
||
<h1 id="examples" class="section-header"><a href="#examples">Examples</a></h1>
|
||
<p>Wait 100ms and print "100 ms have elapsed"</p>
|
||
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">tokio</span>::<span class="ident">time</span>::<span class="ident">sleep</span>;
|
||
|
||
<span class="kw">use</span> <span class="ident">std</span>::<span class="ident">time</span>::<span class="ident">Duration</span>;
|
||
|
||
|
||
<span class="attribute">#[<span class="ident">tokio</span>::<span class="ident">main</span>]</span>
|
||
<span class="ident">async</span> <span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="ident">sleep</span>(<span class="ident">Duration</span>::<span class="ident">from_millis</span>(<span class="number">100</span>)).<span class="ident">await</span>;
|
||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"100 ms have elapsed"</span>);
|
||
}</pre></div>
|
||
<p>Require that an operation takes no more than 300ms.</p>
|
||
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">tokio</span>::<span class="ident">time</span>::{<span class="ident">timeout</span>, <span class="ident">Duration</span>};
|
||
|
||
<span class="ident">async</span> <span class="kw">fn</span> <span class="ident">long_future</span>() {
|
||
<span class="comment">// do work here</span>
|
||
}
|
||
|
||
<span class="kw">let</span> <span class="ident">res</span> <span class="op">=</span> <span class="ident">timeout</span>(<span class="ident">Duration</span>::<span class="ident">from_secs</span>(<span class="number">1</span>), <span class="ident">long_future</span>()).<span class="ident">await</span>;
|
||
|
||
<span class="kw">if</span> <span class="ident">res</span>.<span class="ident">is_err</span>() {
|
||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"operation timed out"</span>);
|
||
}</pre></div>
|
||
<p>A simple example using <a href="../../tokio/time/fn.interval.html"><code>interval</code></a> to execute a task every two seconds.</p>
|
||
<p>The difference between <a href="../../tokio/time/fn.interval.html"><code>interval</code></a> and <a href="../../tokio/time/fn.sleep.html"><code>sleep</code></a> is that an
|
||
<a href="../../tokio/time/fn.interval.html"><code>interval</code></a> measures the time since the last tick, which means that
|
||
<code>.tick().await</code> may wait for a shorter time than the duration specified
|
||
for the interval if some time has passed between calls to <code>.tick().await</code>.</p>
|
||
<p>If the tick in the example below was replaced with <a href="../../tokio/time/fn.sleep.html"><code>sleep</code></a>, the task
|
||
would only be executed once every three seconds, and not every two
|
||
seconds.</p>
|
||
|
||
<div class="example-wrap"><pre class="rust rust-example-rendered">
|
||
<span class="kw">use</span> <span class="ident">tokio</span>::<span class="ident">time</span>;
|
||
|
||
<span class="ident">async</span> <span class="kw">fn</span> <span class="ident">task_that_takes_a_second</span>() {
|
||
<span class="macro">println</span><span class="macro">!</span>(<span class="string">"hello"</span>);
|
||
<span class="ident">time</span>::<span class="ident">sleep</span>(<span class="ident">time</span>::<span class="ident">Duration</span>::<span class="ident">from_secs</span>(<span class="number">1</span>)).<span class="ident">await</span>
|
||
}
|
||
|
||
<span class="attribute">#[<span class="ident">tokio</span>::<span class="ident">main</span>]</span>
|
||
<span class="ident">async</span> <span class="kw">fn</span> <span class="ident">main</span>() {
|
||
<span class="kw">let</span> <span class="ident">interval</span> <span class="op">=</span> <span class="ident">time</span>::<span class="ident">interval</span>(<span class="ident">time</span>::<span class="ident">Duration</span>::<span class="ident">from_secs</span>(<span class="number">2</span>));
|
||
<span class="ident">tokio</span>::<span class="macro">pin</span><span class="macro">!</span>(<span class="ident">interval</span>);
|
||
|
||
<span class="kw">for</span> <span class="ident">_i</span> <span class="kw">in</span> <span class="number">0</span>..<span class="number">5</span> {
|
||
<span class="ident">interval</span>.<span class="ident">as_mut</span>().<span class="ident">tick</span>().<span class="ident">await</span>;
|
||
<span class="ident">task_that_takes_a_second</span>().<span class="ident">await</span>;
|
||
}
|
||
}</pre></div>
|
||
</div><h2 id="reexports" class="section-header"><a href="#reexports">Re-exports</a></h2>
|
||
<table><tr><td><code>pub use std::time::<a class="struct" href="https://doc.rust-lang.org/nightly/core/time/struct.Duration.html" title="struct core::time::Duration">Duration</a>;</code></td></tr></table><h2 id="modules" class="section-header"><a href="#modules">Modules</a></h2>
|
||
<table><tr class="module-item"><td><a class="mod" href="error/index.html" title="tokio::time::error mod">error</a></td><td class="docblock-short"><p>Time error types.</p>
|
||
</td></tr></table><h2 id="structs" class="section-header"><a href="#structs">Structs</a></h2>
|
||
<table><tr class="module-item"><td><a class="struct" href="struct.Instant.html" title="tokio::time::Instant struct">Instant</a></td><td class="docblock-short"><p>A measurement of a monotonically nondecreasing clock.
|
||
Opaque and useful only with <code>Duration</code>.</p>
|
||
</td></tr><tr class="module-item"><td><a class="struct" href="struct.Interval.html" title="tokio::time::Interval struct">Interval</a></td><td class="docblock-short"><p>Stream returned by <a href="../../tokio/time/fn.interval.html"><code>interval</code></a> and <a href="../../tokio/time/fn.interval_at.html"><code>interval_at</code></a>.</p>
|
||
</td></tr><tr class="module-item"><td><a class="struct" href="struct.Sleep.html" title="tokio::time::Sleep struct">Sleep</a></td><td class="docblock-short"><p>Future returned by <a href="../../tokio/time/fn.sleep.html"><code>sleep</code></a> and
|
||
<a href="../../tokio/time/fn.sleep_until.html"><code>sleep_until</code></a>.</p>
|
||
</td></tr><tr class="module-item"><td><a class="struct" href="struct.Timeout.html" title="tokio::time::Timeout struct">Timeout</a></td><td class="docblock-short"><p>Future returned by <a href="../../tokio/time/fn.timeout.html"><code>timeout</code></a> and <a href="../../tokio/time/fn.timeout_at.html"><code>timeout_at</code></a>.</p>
|
||
</td></tr></table><h2 id="functions" class="section-header"><a href="#functions">Functions</a></h2>
|
||
<table><tr class="module-item"><td><a class="fn" href="fn.interval.html" title="tokio::time::interval fn">interval</a></td><td class="docblock-short"><p>Creates new <code>Interval</code> that yields with interval of <code>duration</code>. The first
|
||
tick completes immediately.</p>
|
||
</td></tr><tr class="module-item"><td><a class="fn" href="fn.interval_at.html" title="tokio::time::interval_at fn">interval_at</a></td><td class="docblock-short"><p>Creates new <code>Interval</code> that yields with interval of <code>period</code> with the
|
||
first tick completing at <code>start</code>.</p>
|
||
</td></tr><tr class="module-item"><td><a class="fn" href="fn.sleep.html" title="tokio::time::sleep fn">sleep</a></td><td class="docblock-short"><p>Waits until <code>duration</code> has elapsed.</p>
|
||
</td></tr><tr class="module-item"><td><a class="fn" href="fn.sleep_until.html" title="tokio::time::sleep_until fn">sleep_until</a></td><td class="docblock-short"><p>Waits until <code>deadline</code> is reached.</p>
|
||
</td></tr><tr class="module-item"><td><a class="fn" href="fn.timeout.html" title="tokio::time::timeout fn">timeout</a></td><td class="docblock-short"><p>Require a <code>Future</code> to complete before the specified duration has elapsed.</p>
|
||
</td></tr><tr class="module-item"><td><a class="fn" href="fn.timeout_at.html" title="tokio::time::timeout_at fn">timeout_at</a></td><td class="docblock-short"><p>Require a <code>Future</code> to complete before the specified instant in time.</p>
|
||
</td></tr></table></section><section id="search" class="content hidden"></section><section class="footer"></section><script>window.rootPath = "../../";window.currentCrate = "tokio";</script><script src="../../main.js"></script><script defer src="../../search-index.js"></script></body></html> |