#thread-pool #future #rayon #async

closure-future

轻松在线程池上运行闭包并将它们的结果转换为 Future

1 个不稳定版本

0.1.0 2021 年 11 月 4 日

#930 in 并发

BSD-3-Clause

6KB
54

此 crate 使将函数或闭包转换为两个对象变得容易:一个可以在线程池上运行的对象,以及其结果的 Future。与现有解决方案不同,开始计算与轮询未来是独立的。它与用于实际计算的线程或线程池以及未来执行器完全独立。

入口点是 closure_future

示例

工作可以在线程上运行

# use std::time::Duration;
# use closure_future::closure_future;
# use pollster::block_on;
let (future, worker) = closure_future(|| {
    // ... do some work and return a value ...
    "Hello!"
});
std::thread::spawn(|| worker.run());
assert_eq!(block_on(future), Ok("Hello!"))

还可以使用 rayon 全局线程池,使用提供的辅助函数运行工作

# use std::time::Duration;
# use closure_future::spawn_rayon;
# use pollster::block_on;
let mut futures = Vec::new();
for i in 0..10 {
    let future = spawn_rayon(move || {
        // ... do some work and return a value ...
        i
    });
    futures.push(future)
}
for (i,fut) in futures.into_iter().enumerate() {
    assert_eq!(block_on(fut),Ok(i));
}

依赖关系

~62–340KB