2 个不稳定版本
0.2.0 | 2022年3月8日 |
---|---|
0.1.0 | 2018年9月6日 |
#1066 在 异步
12,849 每月下载量
在 8 crates 中使用
15KB
287 行
tokio-scoped
tokio-scoped 提供了一个受 crossbeam 启发的 scope
函数,但用于 tokio
运行时。作用域允许用户在作用域中生成没有 'static
生命周期的 futures,通过确保在作用域退出之前,作用域中的每个 future 都已完成。
示例
#[tokio::main]
async fn main() {
let mut v = String::from("Hello");
tokio_scoped::scope(|scope| {
// Use the scope to spawn the future.
scope.spawn(async {
v.push('!');
});
});
// The scope won't exit until all spawned futures are complete.
assert_eq!(v.as_str(), "Hello!");
}
lib.rs
:
一个作用域 tokio
运行时,可以用来创建可以生成可以访问堆栈数据的 futures 的 Scope
。也就是说,由 Scope
生成的 futures 不需要 'static
生命周期限制。这可以通过确保 Scope
在所有生成的 futures 完成执行之前不会退出来实现。请注意,当在异步上下文中创建作用域时(例如,在另一个生成的 futures 中),应谨慎操作。因为当 Scope
退出时,它将阻塞直到所有由 Scope
生成的 futures 都完成。因此,当在异步上下文中创建作用域时,应谨慎操作。
示例
#[tokio::main]
async fn main() {
let mut v = String::from("Hello");
tokio_scoped::scope(|scope| {
// Use the scope to spawn the future.
scope.spawn(async {
v.push('!');
});
});
// The scope won't exit until all spawned futures are complete.
assert_eq!(v.as_str(), "Hello!");
}
另请参阅 crossbeam::scope
依赖项
~2.2–3.5MB
~51K SLoC