tokio_threadpool

Struct Sender

Source
pub struct Sender { /* private fields */ }
Expand description

Submit futures to the associated thread pool for execution.

A Sender instance is a handle to a single thread pool, allowing the owner of the handle to spawn futures onto the thread pool. New futures are spawned using Sender::spawn.

The Sender handle is only used for spawning new futures. It does not impact the lifecycle of the thread pool in any way.

Sender instances are obtained by calling ThreadPool::sender. The Sender struct implements the Executor trait.

Implementations§

Source§

impl Sender

Source

pub fn spawn<F>(&self, future: F) -> Result<(), SpawnError>
where F: Future<Item = (), Error = ()> + Send + 'static,

Spawn a future onto the thread pool

This function takes ownership of the future and spawns it onto the thread pool, assigning it to a worker thread. The exact strategy used to assign a future to a worker depends on if the caller is already on a worker thread or external to the thread pool.

If the caller is currently on the thread pool, the spawned future will be assigned to the same worker that the caller is on. If the caller is external to the thread pool, the future will be assigned to a random worker.

If spawn returns Ok, this does not mean that the future will be executed. The thread pool can be forcibly shutdown between the time spawn is called and the future has a chance to execute.

If spawn returns Err, then the future failed to be spawned. There are two possible causes:

  • The thread pool is at capacity and is unable to spawn a new future. This is a temporary failure. At some point in the future, the thread pool might be able to spawn new futures.
  • The thread pool is shutdown. This is a permanent failure indicating that the handle will never be able to spawn new futures.

The status of the thread pool can be queried before calling spawn using the status function (part of the Executor trait).

§Examples
use futures::future::{Future, lazy};

// Create a thread pool with default configuration values
let thread_pool = ThreadPool::new();

thread_pool.sender().spawn(lazy(|| {
    println!("called from a worker thread");
    Ok(())
})).unwrap();

// Gracefully shutdown the threadpool
thread_pool.shutdown().wait().unwrap();

Trait Implementations§

Source§

impl Clone for Sender

Source§

fn clone(&self) -> Sender

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Sender

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<T> Executor<T> for Sender
where T: Future<Item = (), Error = ()> + Send + 'static,

Source§

fn execute(&self, future: T) -> Result<(), ExecuteError<T>>

Spawns a future to run on this Executor, typically in the “background”. Read more
Source§

impl<'a> Executor for &'a Sender

Source§

fn status(&self) -> Result<(), SpawnError>

Provides a best effort hint to whether or not spawn will succeed. Read more
Source§

fn spawn( &mut self, future: Box<dyn Future<Item = (), Error = ()> + Send>, ) -> Result<(), SpawnError>

Spawns a future object to run on this executor. Read more
Source§

impl Executor for Sender

Source§

fn status(&self) -> Result<(), SpawnError>

Provides a best effort hint to whether or not spawn will succeed. Read more
Source§

fn spawn( &mut self, future: Box<dyn Future<Item = (), Error = ()> + Send>, ) -> Result<(), SpawnError>

Spawns a future object to run on this executor. Read more
Source§

impl<T> TypedExecutor<T> for Sender
where T: Future<Item = (), Error = ()> + Send + 'static,

Source§

fn status(&self) -> Result<(), SpawnError>

Provides a best effort hint to whether or not spawn will succeed. Read more
Source§

fn spawn(&mut self, future: T) -> Result<(), SpawnError>

Spawns a future to run on this executor. Read more

Auto Trait Implementations§

§

impl Freeze for Sender

§

impl !RefUnwindSafe for Sender

§

impl Send for Sender

§

impl Sync for Sender

§

impl Unpin for Sender

§

impl !UnwindSafe for Sender

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.