如何在 Rust 中将参数传递给线程?

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 中是否可行,如果可以,那么如何实现。

先感谢您。

eff*_*ect 5

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)