Функция trace_ with
pub fn trace_with<FN, FT, R>(f: FN, trace_leaf: FT) -> R
Доступно только в
tokio_unstable и Linux, с функцией crate rt и функцией crate taskdump и (AArch64 или s390x или x86 или x86-64).Запускает f. Если f достигает точки уступки управления Tokio, будет вызвана trace_leaf.
Это позволяет получать дамп задач с помощью предоставленного вызывающим кодом механизма создания дампа задач. Если f является функцией опроса future и этот future возвращает Poll::Pending, будет вызвана trace_leaf. Затем trace_leaf может получить трассировку стека, чтобы точно определить, где произошла уступка управления.
Пример
use std::future::Future;
use std::task::Poll;
use tokio::runtime::dump::{trace_with, Trace, TraceMeta};
fn my_trace_leaf(_meta: &TraceMeta, count: &mut u32) {
*count += 1;
}
let mut fut = std::pin::pin!(async {
tokio::task::yield_now().await;
});
let mut leaf_count = 0;
Trace::root(std::future::poll_fn(|cx| {
trace_with(
|| { let _ = fut.as_mut().poll(cx); },
|meta| my_trace_leaf(meta, &mut leaf_count),
);
Poll::Ready(())
})).await;
assert!(leaf_count > 0);
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/runtime/dump/fn.trace_with.html