Ein*_*che 2 multithreading closures rust
我有一个无法更改的闭包,我需要在新线程中运行它并且需要向其传递一个变量。这就是我想象的代码的样子:
use std::thread;
fn main() {
// I can not influence this closure, but this is what it looks like
let handle = move |data: i32| {
println!("Got {data}")
};
let foo = 123;
// This doesn't work
thread::spawn(handle).arg(foo).join()
}
Run Code Online (Sandbox Code Playgroud)
Python 中的等效代码确实可以工作,所以我想知道这在 Rust 中是否可行,如果可以,那么如何实现。
先感谢您。
thread::spawn()的文档表明它期望输入一个不带参数的闭包。因此,你不能直接使用你的handle闭包。但是,您可以创建一个不带参数的新闭包来调用您的handle闭包,如下所示:
use std::thread;
fn main() {
let handle = move |data: i32| {
println!("Got {data}")
};
let foo = 123;
thread::spawn(move || {handle(foo)}).join();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |