Rust有可以绑定到
引用:
例如:在下面的代码段中,我没有看到中止任务的析构函数,但我不知道它是否被调用或发生在另一个线程中,其中print没有显示。
Abortable
futures的async
方法。文档表示,当中止时:引用:
将立即完成未来,而不会再做任何进一步的进展。
任务拥有的变量是否会被丢弃?如果这些变量实现了drop
,那么drop
会被调用吗?如果future已经生成了其他futures,那么它们都会被链式中止吗?例如:在下面的代码段中,我没有看到中止任务的析构函数,但我不知道它是否被调用或发生在另一个线程中,其中print没有显示。
use futures::executor::block_on;
use futures::future::{AbortHandle, Abortable};
struct S {
i: i32,
}
impl Drop for S {
fn drop(&mut self) {
println!("dropping S");
}
}
async fn f() -> i32 {
let s = S { i: 42 };
std::thread::sleep(std::time::Duration::from_secs(2));
s.i
}
fn main() {
println!("first test...");
let (abort_handle, abort_registration) = AbortHandle::new_pair();
let _ = Abortable::new(f(), abort_registration);
abort_handle.abort();
std::thread::sleep(std::time::Duration::from_secs(1));
println!("second test...");
let (_, abort_registration) = AbortHandle::new_pair();
let task = Abortable::new(f(), abort_registration);
block_on(task).unwrap();
std::thread::sleep(std::time::Duration::from_secs(1));
}
{{链接1:游乐场}}
s
(playground) - Jmb