#async-std #tokio #async #async-await #scoped #spawn #run-time

async-scoped

Spawn scoped (non 'static) asynchronous futures for async_std and tokio runtimes

13 unstable releases (6 breaking)

0.9.0 Jan 25, 2024
0.8.0 Nov 16, 2023
0.7.1 Nov 17, 2022
0.7.0 Jul 7, 2021
0.3.1 Dec 24, 2019

#34 in Asynchronous

Download history 25814/week @ 2024-08-12 27965/week @ 2024-08-19 34637/week @ 2024-08-26 31778/week @ 2024-09-02 40858/week @ 2024-09-09 34838/week @ 2024-09-16 41042/week @ 2024-09-23 42260/week @ 2024-09-30 42327/week @ 2024-10-07 32902/week @ 2024-10-14 35275/week @ 2024-10-21 44961/week @ 2024-10-28 43531/week @ 2024-11-04 53910/week @ 2024-11-11 51564/week @ 2024-11-18 42765/week @ 2024-11-25

195,961 downloads per month
Used in 102 crates (29 directly)

Apache-2.0/MIT

36KB
568 lines

Async-scoped

Enables controlled spawning of non-'static futures when using the async-std or tokio executors.

Motivation

Present executors (such as async-std, tokio, etc.) all support spawning 'static futures onto a thread-pool. However, they do not support spawning futures with lifetime smaller than 'static.

While the future combinators such as for_each_concurrent offer concurrency, they are bundled as a single Task structure by the executor, and hence are not driven in parallel. This can be seen when benchmarking a reasonable number (> ~1K) of I/O futures, or a few CPU heavy futures.

Usage

The API is meant to be a minimal wrapper around efficient executors. Users may use "use-async-std", or the "use-tokio" features, to obtain a specific global executor implementation. These features provide TokioScope and AsyncScope that support spawning, and blocking. However, none of those features are necessary - you may freely implement your own executor. See docs.rs for detailed documentation.

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~1–11MB
~139K SLoC