3 个不稳定版本
0.3.0 | 2021年1月10日 |
---|---|
0.2.3 | 2020年8月23日 |
0.1.1 |
|
#11 在 #后台线程
每月 27 次下载
用于 buffer-trigger
10KB
144 行
生命周期线程
具有生命周期的无锁线程。将值分为主从两部分。当主值的生命周期结束时,从值将无法访问。
简介
具有生命周期的无锁线程。将值分为主从两部分。当主值的生命周期结束时,从值将无法访问。
适用场景
- 需要在后台执行操作,但生命周期不是静态的
- ...
基本用法
use std::{thread, time::Duration};
#[test]
fn it_works() {
let s = "xxx";
let outer = lifetime_thread::spawn(s, |inner| {
println!("begin");
while let Some(t) = inner.get() {
println!("ok! {}", t);
assert_eq!(*t, "xxx");
thread::sleep(Duration::from_millis(1));
}
println!("over")
});
thread::sleep(Duration::from_millis(10));
assert_eq!(*outer, "xxx")
}
#[tokio::test]
async fn async_works() {
let s = "xxx";
let outer = lifetime_thread::async_spawn(s, |inner| async move {
println!("begin");
while let Some(t) = inner.get() {
println!("ok! {}", t);
assert_eq!(*t, "xxx");
tokio::time::sleep(Duration::from_millis(1)).await;
}
println!("over")
});
tokio::time::sleep(Duration::from_millis(10)).await;
assert_eq!(*outer, "xxx");
drop(outer);
}
输出
begin
ok! xxx
ok! xxx
...
...
ok! xxx
over
特性
- 不同的运行时
- 同步(多线程):lifetime_thread::spawn
- tokio:lifetime_thread::async_spawn
许可协议
根据您的选择,许可协议为以下之一:
。
贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义,您有意提交以包含在工作中的任何贡献,均应按照上述方式双许可,而不附加任何额外的条款或条件。
依赖
~2.6–8.5MB
~62K SLoC