Task executor that inspired by golang runtime.
The executor is running in thread pool, and when it detect blocking call inside a task, it will automatically scale the thread pool.
Because of this feature, it is always safe for you to do blocking operation in a task, you don't need to worry about blocking the entire executor thread.
And like go
in golang, spawn
does not return task handle,
if you need synchronization, you can use [futures-channel
] or [std channel
]
With cargo add installed run:
sh
$ cargo add lelet
```rust use std::thread; use std::time::Duration;
use futures_timer::Delay;
fn main() { lelet::spawn(async { for _ in 0..10 { Delay::new(Duration::from_secs(1)).await; println!("Non-blocking Hello World"); } });
lelet::spawn(async {
for _ in 0..10 {
thread::sleep(Duration::from_secs(1));
println!("Blocking Hello World");
}
});
thread::sleep(Duration::from_secs(11));
} ```