<div align="center">
# Bevy Async Task
[](https://discord.gg/zrjnQzdjCB)

[](https://github.com/loopystudios/bevy_async_task/actions)
[](https://deps.rs/repo/github/loopystudios/bevy_async_task)
[](https://crates.io/crates/bevy_async_task)
[](https://docs.rs/bevy_async_task)
A minimum crate for ergonomic abstractions to async programming in Bevy. There is full API support for **wasm** and **native**. Android and iOS are untested (Help needed).
</div>
Bevy Async Task provides Bevy system parameters to run asynchronous tasks in the background on web and native with timeouts and output capture.
## Bevy version support
|0.17|0.9,main|
|0.16|0.6-0.8|
|0.15|0.3-0.5|
|0.14|0.2|
|0.13|0.1|
|<= 0.13|Unsupported|
## Usage
There are several [examples](examples/) for reference.
You can also run examples on web:
```shell
# Make sure the Rust toolchain supports the wasm32 target
rustup target add wasm32-unknown-unknown
cargo run_wasm --example simple
```
### Polling in systems
Poll one task at a time with `TaskRunner<T>`:
```rust
async fn long_task() -> u32 {
sleep(Duration::from_millis(1000)).await;
5
}
fn my_system(mut task_runner: TaskRunner<u32>) {
if task_runner.is_idle() {
task_executor.start(long_task());
info!("Started!");
}
match task_runner.poll() {
Poll::Ready(v) => {
info!("Received {v:?}");
}
Poll::Pending => {
// Waiting...
}
}
}
```
Poll many similar tasks simultaneously with `TaskPool<T>`:
```rust
fn my_system(mut task_pool: TaskPool<u64>) {
if task_pool.is_idle() {
info!("Queueing 5 tasks...");
for i in 1..=5 {
task_pool.spawn(async move { // Closures work too!
sleep(Duration::from_millis(i * 1000)).await;
i
});
}
}
for status in task_pool.iter_poll() {
if let Poll::Ready(v) = status {
info!("Received {v:?}");
}
}
}
```
We also have a [`cross_system` example](./examples/cross_system.rs).
## Community
All Loopy projects and development happens in the [Loopy Discord](https://discord.gg/KSfKceUKde). The discord is open to the public.
Contributions are welcome by pull request. The [Rust code of conduct](https://www.rust-lang.org/policies/code-of-conduct) applies.
## License
Licensed under either of
- Apache License, Version 2.0
([LICENSE-APACHE](LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license
([LICENSE-MIT](LICENSE-MIT) or <http://opensource.org/licenses/MIT>)
at your option
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.