timeout-tracing allows executing an async function with a timeout (much like tokio::time::timeout).
When the timeout elapses it returns the exact location where the async code was awaiting at that specific moment.
Basic usage
The basic usage looks as follows:
use Duration;
use ;
use sleep;
use instrument;
use ErrorLayer;
use ;
async
// (5)
async
async
This prints out:
timeout elapsed at:
trace 0:
0: basic::step
with i=9
at examples/basic.rs:31
1: basic::computation
with n=25
at examples/basic.rs:24
tracing-errormust be initialized, as it is used (by default) to gather span traces.timeout_tracing::timeoutexecutes the future with a timeoutCaptureSpanTraceis the object that captures the stack. The default implementation captures span trace (viatracing-error). It is also possible to capture a stack trace as well usingCaptureSpanAndStackTrace(via Rust standard library; theRUST_BACKTRACE=1environment variable must be set for stack trace capture to work)- If the future does not complete within the given time limit, an error is returned. It contains a set of traces for each active leaf await point within the future.
- The executed functions should be instrumented with
tokio-tracingspans (for example, by using the#[tokio-tracing::instrument]macro) for span trace to work.