Skip to main content

TaskSpawner

Trait TaskSpawner 

Source
pub trait TaskSpawner:
    Send
    + Sync
    + Unpin
    + Debug
    + DynClone {
    // Required methods
    fn spawn_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>;
    fn spawn_critical_task(
        &self,
        name: &'static str,
        fut: BoxFuture<'static, ()>,
    ) -> JoinHandle<()>;
    fn spawn_blocking_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>;
    fn spawn_critical_blocking_task(
        &self,
        name: &'static str,
        fut: BoxFuture<'static, ()>,
    ) -> JoinHandle<()>;
}
Expand description

A type that can spawn tasks.

The main purpose of this type is to abstract over Runtime so it’s more convenient to provide default impls for testing.

§Examples

Use the TokioTaskExecutor that spawns with [tokio::task::spawn]

use reth_tasks::{TaskSpawner, TokioTaskExecutor};
let executor = TokioTaskExecutor::default();

let task = executor.spawn_task(Box::pin(async {
    // -- snip --
}));
task.await.unwrap();

Use the Runtime that spawns task directly onto the tokio runtime via the [Handle].

fn t() {
 use reth_tasks::TaskSpawner;
let rt = tokio::runtime::Runtime::new().unwrap();
let runtime = Runtime::with_existing_handle(rt.handle().clone()).unwrap();
let task = TaskSpawner::spawn_task(&runtime, Box::pin(async {
    // -- snip --
}));
rt.block_on(task).unwrap();

The TaskSpawner trait is DynClone so Box<dyn TaskSpawner> are also Clone.

Required Methods§

Source

fn spawn_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Spawns the task onto the runtime. See also [Handle::spawn].

Source

fn spawn_critical_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

This spawns a critical task onto the runtime.

Source

fn spawn_blocking_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Spawns a blocking task onto the runtime.

Source

fn spawn_critical_blocking_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

This spawns a critical blocking task onto the runtime.

Implementations on Foreign Types§

Source§

impl<'a, T: 'a + TaskSpawner + ?Sized> TaskSpawner for &'a T
where &'a T: Send + Sync + Unpin + Debug + DynClone,

Source§

fn spawn_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Source§

fn spawn_critical_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

Source§

fn spawn_blocking_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Source§

fn spawn_critical_blocking_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

Source§

impl<T: TaskSpawner + ?Sized> TaskSpawner for Arc<T>
where Arc<T>: Send + Sync + Unpin + Debug + DynClone,

Source§

fn spawn_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Source§

fn spawn_critical_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

Source§

fn spawn_blocking_task(&self, fut: BoxFuture<'static, ()>) -> JoinHandle<()>

Source§

fn spawn_critical_blocking_task( &self, name: &'static str, fut: BoxFuture<'static, ()>, ) -> JoinHandle<()>

Implementors§