#timeout #raft #tokio #timer #cancellable

dyn-timeout

动态超时、取消、在回调执行前添加和移除时间

6个版本

0.3.3 2022年4月4日
0.3.2 2022年4月1日
0.3.1 2022年3月24日
0.2.0 2022年1月4日
0.1.0 2022年1月3日

#935 in 异步

每月21次下载

自定义许可

22KB
283

CI

动态超时

在可变持续时间后执行函数。

use std::time::Duration;
use dyn_timeout::std_thread::DynTimeout;

const TWENTY: Duration = Duration::from_millis(20);

let dyn_timeout = DynTimeout::new(TWENTY, || {
   println!("after forty milliseconds");
});
dyn_timeout.add(TWENTY).unwrap();
// .sub...
// .cancel

这个库最初是为了用作类似于raft的选举超时

tokio版本

此crate包含一个带有线程和tokio实现的std,如果您已经使用此异步库,则非常有用。

use tokio::runtime::Runtime;
use dyn_timeout::tokio_impl::DynTimeout;
use std::time::Duration;
const TWENTY: Duration = Duration::from_millis(20);

let mut rt = Runtime::new().unwrap(); 
rt.spawn(async {
   let dyn_timeout = DynTimeout::new(TWENTY, || {
       println!("after forty milliseconds");
   });
   dyn_timeout.add(TWENTY).await.unwrap();
});

基准测试

以下是使用标准实现等待40毫秒的基准测试,时间精度在纳秒以下降低。(使用tokio也会降低精度)

test test::simple_bench ... bench:  40,641,475 ns/iter (+/- 68,064)

贡献

  • 所有提高时间精度和代码架构的改进都受欢迎。
  • 使用示例、文档、错别字和注释、单元测试。
  • 所有有趣的想法也都可以在问题中了解。
  • 在GitHub问题中提供反馈,报告错误和错误。

所有开发贡献都必须通过当前的单元测试,并且必须包括新的测试!


许可 GNU通用公共许可证 版本3,2007年6月29日

分发此库的目的是希望它会有用,但没有提供任何保证;甚至没有关于适销性或适用于特定目的的隐含保证。有关详细信息,请参阅GNU通用公共许可证。

依赖项

~2.5–9.5MB
~60K SLoC