Spec-Zone.ru › Tokio

Функция trace_with

pub fn trace_with<FN, FT, R>(f: FN, trace_leaf: FT) -> R
where FN: FnOnce() -> R, FT: FnMut(&TraceMeta),
Доступно только в 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API