如何从函数返回JoinHandle?

时间:2017-05-08 00:26:00

标签: multithreading rust

处理这种情况的最佳方法是什么:

<div id="members-search">
    <input class="typeahead" type="text" placeholder="Search">
</div>

我收到错误:

use std::thread;

struct Prefe;

fn main() {
    let prefe = Prefe;

    start(&prefe).join();
}

fn start(pre: &Prefe) -> thread::JoinHandle {
    thread::spawn(move || {
        println!("Test spawn");
    })
}

我想我可以使用这样的东西,但我不知道该用error[E0243]: wrong number of type arguments: expected 1, found 0 --> src/main.rs:11:26 | 11 | fn start(pre: &Prefe) -> thread::JoinHandle { | ^^^^^^^^^^^^^^^^^^ expected 1 type argument

T

我看到fn start<T>(pre: &Prefe, t: T) -> thread::JoinHandle<T> { thread::spawn(move || { println!("Test spawn"); }) } 使用此功能返回,但我不知道这是否可以帮助我或如何使用它:

thread::spawn

这似乎有效,但我不知道这是对还是错:

Builder::new().spawn(f).unwrap()

1 个答案:

答案 0 :(得分:5)

查看thread::spawn的功能签名:

pub fn spawn<F, T>(f: F) -> JoinHandle<T>
where
    F: FnOnce() -> T,
    F: Send + 'static,
    T: Send + 'static,

这表示spawn采用泛型F。此类型必须实现特征FnOnce。该实现不带参数,并返回类型为T的参数。 spawn返回使用相同类型JoinHandle参数化的T

要使用此信息,您需要知道闭包返回的类型。一旦你知道,那就是JoinHandle应该用参数化的类型。

您的示例闭包调用println!,其返回类型为(),这就是 JoinHandle将使用的内容。