1 个不稳定版本
0.1.0 | 2019年5月25日 |
---|
#8 in #cancellation
9KB
108 行
Rust 中的合作取消令牌
这个crate提供了一个简单的令牌,可以用来合作管理操作的取消。也支持设置截止日期/超时。
用法
显式交互式取消
这个示例很难展示一个完整的运行示例,但概念很简单:将令牌传递给一个长时间运行的操作,并让它每隔一段时间检查是否取消。
然后你可以连接一个按钮点击或CTRL-C,以便它调用 token.cancel()
。
注意,Token::cancel()
的实现是一个简单的原子操作,并且是异步信号安全的。
use cancel::{Canceled, Token};
fn do_something(token: Arc<Token>) -> Result<bool, Canceled> {
while !done {
token.check_cancel()?;
// process more stuff here
}
Ok(true)
}
fn cancel_button_clicked(token: Arc<Token>) {
token.cancel();
}
简单的超时管理
在这种情况下,令牌已经配置了截止日期。当调用 do_something
函数时,它会合作检查截止日期。
use cancel::{Canceled, Token};
use std::time::Duration;
fn do_something(token: &Token) -> Result<bool, Canceled> {
while !done {
token.check_cancel()?;
// process more stuff here
}
Ok(true)
}
fn start_something() -> Result<bool, Canceled> {
let token = Token::with_duration(Duration::new(10, 0));
do_something(&token)
}