async-backtrace 的初个版本,旨在让开发者能够高效地追踪应用中异步任务的状态。Cargo.toml 文件中:[dependencies]
async-backtrace = "0.2"
#[async_backtrace::framed] 标注一个异步函数可用于追踪,使用 taskdump_tree 以树的形式输出当前所有被追踪的任务状态:#[tokio::main(flavor = "current_thread")]
async fn main() {
tokio::select! {
// run the following branches in order of their appearance
biased;
// spawn task #1
_ = tokio::spawn(foo()) => { unreachable!() }
// spawn task #2
_ = tokio::spawn(foo()) => { unreachable!() }
// print the running tasks
_ = tokio::spawn(async {}) => {
println!("{}", async_backtrace::taskdump_tree(true));
}
};
}
#[async_backtrace::framed]
async fn foo() {
bar().await;
}
#[async_backtrace::framed]
async fn bar() {
baz().await;
}
#[async_backtrace::framed]
async fn baz() {
std::future::pending::<()>().await
}
╼ multiple::foo::{{closure}} at backtrace/examples/multiple.rs:22:1
└╼ multiple::bar::{{closure}} at backtrace/examples/multiple.rs:27:1
└╼ multiple::baz::{{closure}} at backtrace/examples/multiple.rs:32:1
╼ multiple::foo::{{closure}} at backtrace/examples/multiple.rs:22:1
└╼ multiple::bar::{{closure}} at backtrace/examples/multiple.rs:27:1
└╼ multiple::baz::{{closure}} at backtrace/examples/multiple.rs:32:1
async-backtrace 才刚刚起步,如果遇到任何问题,欢迎大家在 github issue 上进行反馈Toom-3,Schönhage–Strassen 等大数乘法。原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。