[]Function astral::thirdparty::rayon::spawn

pub fn spawn<F>(func: F) where
    F: FnOnce() + Send + 'static, 

Fires off a task into the Rayon threadpool in the "static" or "global" scope. Just like a standard thread, this task is not tied to the current stack frame, and hence it cannot hold any references other than those with 'static lifetime. If you want to spawn a task that references stack data, use the scope() function to create a scope.

Since tasks spawned with this function cannot hold references into the enclosing stack frame, you almost certainly want to use a move closure as their argument (otherwise, the closure will typically hold references to any variables from the enclosing function that you happen to use).

This API assumes that the closure is executed purely for its side-effects (i.e., it might send messages, modify data protected by a mutex, or some such thing). If you want to compute a result, consider spawn_future().

Panic handling

If this closure should panic, the resulting panic will be propagated to the panic handler registered in the ThreadPoolBuilder, if any. See ThreadPoolBuilder::panic_handler() for more details.

Examples

This code creates a Rayon task that increments a global counter.

use std::sync::atomic::{AtomicUsize, Ordering, ATOMIC_USIZE_INIT};

static GLOBAL_COUNTER: AtomicUsize = ATOMIC_USIZE_INIT;

rayon::spawn(move || {
    GLOBAL_COUNTER.fetch_add(1, Ordering::SeqCst);
});