| Crates.io | sync_select |
| lib.rs | sync_select |
| version | 0.2.3 |
| created_at | 2024-11-08 19:25:25.256215+00 |
| updated_at | 2025-09-21 02:05:19.601663+00 |
| description | A short-circuiting `std::thread::scope`. |
| homepage | |
| repository | |
| max_upload_size | |
| id | 1441465 |
| size | 5,539 |
A short-circuiting std::thread::scope.
use std::{thread::sleep, time::Duration};
use sync_select::*;
fn main() {
let s = SyncSelect::new();
// Task A (3rd to finish)
s.spawn(|| sleep(Duration::from_secs(3)));
// Task B (1st to finish => Subtask 1)
s.spawn_with(|s| {
// Task C (subtask of B) (1st to finish)
s.spawn(|| sleep(Duration::from_secs(1)));
// Task D (subtask of B) (2nd to finish)
s.spawn(|| sleep(Duration::from_secs(2)));
});
// In this specific scenario, Task B is first to die,
// because it short-circuits due to one of it's subtasks
// finishing. This causes the root to short-circuit,
// resulting in the program exiting.
// Note: scopes automatically short-circuit when dropped.
}
scope(...) function or something.select! similar to tokio's select! macro.