Expand description
The bounded_join_set
crate provides a simple wrapper around Tokio’s JoinSet
with a configurable concurrency limit.
It exposes the same API as the native JoinSet
, but ensures that no matter how many tasks you add to the set,
only a predetermined number (based on the concurrency limit) will be polled concurrently.
§Why use bounded_join_set
?
In scenarios where you want to spawn multiple concurrent tasks using Tokio, but want to avoid overwhelming the system
with too many simultaneous tasks, bounded_join_set
comes to the rescue. It ensures that you won’t exhaust
system resources, while still benefiting from concurrency.
§How to use
Add bounded_join_set
to your Cargo.toml
dependencies:
[dependencies]
bounded_join_set = "0.3.0"
Here’s a basic usage example:
use bounded_join_set::JoinSet;
#[tokio::main]
async fn main() {
let concurrency_limit = 5;
let mut join_set = JoinSet::new(concurrency_limit);
for _ in 0..10 {
join_set.spawn(async {
// Your concurrent task here.
});
}
while join_set.join_next().await.is_some() {}
}
§Features & Benefits
- Simple API: If you’re familiar with Tokio’s
JoinSet
, you already know how to usebounded_join_set
. - Resource Management: Prevents system overloads by controlling the number of concurrently polled tasks.
- Flexible: Set your own concurrency limit according to your system’s capabilities and requirements.
§Limitations
While bounded_join_set
aims to offer an enhanced concurrency control over Tokio’s native JoinSet
,
there are certain limitations to be aware of:
- No
spawn_blocking
Support: As of the current version, the crate does not support thespawn_blocking
method provided by Tokio. If your application relies heavily on CPU-bound operations that would benefit from thespawn_blocking
feature, you’ll need to manage that separately from this crate. We are looking into extending support for this in future releases, but there’s no definite timeline yet.
Modules§
- tokio_
exports - Re-export tokio types that are exposed in the api
Structs§
- JoinSet
- Same as
tokio::task::JoinSet
except the number of actively polled futures is limited to a set concurrency.