1 个不稳定版本

0.1.0 2019年5月25日

#8 in #cancellation

MIT 许可证

9KB
108

Rust 中的合作取消令牌

Build Status

文档

这个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)
}

无运行时依赖