Expand description

crates.io version license: Apache 2.0 unsafe forbidden pipeline status

An async executor.

It is part of safina, a safe async runtime.

Features

  • Spawn async tasks to execute on a threadpool.
  • Schedule closures or FnOnce to run on a separate thread pool for blocking jobs.
  • Supports multiple executors.
  • forbid(unsafe_code)
  • Depends only on std
  • Good test coverage (100%)

Limitations

  • Allocates memory
  • Not optimized

Documentation

https://docs.rs/safina-executor

Examples

let executor = safina_executor::Executor::default();
let (sender, receiver) = std::sync::mpsc::channel();
executor.spawn(async move {
    sender.send(()).unwrap();
});
receiver.recv().unwrap();
let result = safina_executor::block_on(async {
    prepare_request().await?;
    execute_request().await
})?;
let result = safina_executor::schedule_blocking(|| {
    read_file1()?;
    read_file2()
}).async_recv().await.unwrap()?;

Alternatives

Changelog

  • v0.3.3 - Eliminate spurious “resumed after completion” worker thread panics.
  • v0.3.2 - Re-export safina_sync::Receiver and safina_threadpool::NewThreadPoolError.
  • v0.3.1 - Use safina-async v0.2.1.
  • v0.3.0 - schedule_blocking to return new safina_sync::Receiver.
  • v0.2.1 - Update docs.
  • v0.2.0
    • Executor::new and Executor::with_name to return Result.
    • Upgrade to safina-threadpool v0.2.0.
  • v0.1.7 - block_on functions to take futures that are not Send.
  • v0.1.6 - Fix deadlock in block_on and block_on_unpin when task is awakened a second time.
  • v0.1.5 - Support stable Rust! Needs 1.51+.
  • v0.1.4 - Add schedule_blocking and Executor::schedule_blocking
  • v0.1.3
    • Removed global executor. Users must explicitly create executor.
    • Removed dependency on unstable OnceCell.
    • Uses safina_threadpool internally.
  • v0.1.2 - Let callers pass futures to spawn and block_on without using Box::pin. Add spawn_unpin and block_on_unpin for folks who need to avoid allocating. so callers don’t have to.
  • v0.1.1 - Fix badge and update readme
  • v0.1.0 - Renamed from safina

TO DO

Release Process

  1. Edit Cargo.toml and bump version number.
  2. Run ./release.sh

Structs

A collection of threads for executing tasks and blocking jobs.

The receiving half of a channel. This half can only be owned by one thread.

Enums

Functions

Executes the future on the current thread and returns its result.

Executes the future on the current thread and returns its result.

Gets the Executor from thread-local storage.

Schedules func to run on any available thread in the blocking thread pool.

Sets executor as the Executor for the current thread, saving it to thread-local storage.

Creates a new task to execute fut and schedules it for immediate execution.

Creates a new task to execute fut and schedules it for immediate execution.