https://github.com/rmanoka/async-scoped
A scope for async_std and tokio to spawn non-static futures
https://github.com/rmanoka/async-scoped
async rust
Last synced: 3 months ago
JSON representation
A scope for async_std and tokio to spawn non-static futures
- Host: GitHub
- URL: https://github.com/rmanoka/async-scoped
- Owner: rmanoka
- Created: 2019-07-13T19:26:48.000Z (almost 7 years ago)
- Default Branch: main
- Last Pushed: 2024-05-28T07:03:42.000Z (about 2 years ago)
- Last Synced: 2025-04-29T02:04:53.972Z (about 1 year ago)
- Topics: async, rust
- Language: Rust
- Homepage:
- Size: 68.4 KB
- Stars: 131
- Watchers: 4
- Forks: 14
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Async-scoped
Enables controlled spawning of non-`'static` futures when
using the [async-std](//github.com/async-rs/async-std) or
[tokio](//github.com/tokio-rs/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](https://docs.rs/async-scoped) for detailed
documentation.
## License
Licensed under either of [Apache License, Version
2.0](//www.apache.org/licenses/LICENSE-2.0) or [MIT
license](//opensource.org/licenses/MIT) 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.