Skip to main content

bevy_async_task/
lib.rs

1//! Ergonomic abstractions to async programming in Bevy for all platforms.
2
3mod error;
4mod receiver;
5mod stream;
6mod task;
7mod task_pool;
8mod task_runner;
9mod task_stream;
10mod util;
11
12pub use error::TimeoutError;
13pub use receiver::AsyncReceiver;
14pub use receiver::AsyncStreamReceiver;
15pub use stream::AsyncStream;
16pub use task::AsyncTask;
17pub use task::TimedAsyncTask;
18pub use task_pool::TaskPool;
19pub use task_pool::TimedTaskPool;
20pub use task_runner::TaskRunner;
21pub use task_runner::TimedTaskRunner;
22pub use task_stream::TaskStream;
23pub use util::pending;
24pub use util::sleep;
25pub use util::timeout;
26
27/// A good default timeout. Values over `i32::MAX` will cause panics on web.
28pub const DEFAULT_TIMEOUT: core::time::Duration = core::time::Duration::from_millis(60 * 1000);
29
30/// The maximum timeout allowed. Anything above this will cause a panic on web.
31pub const MAX_TIMEOUT: core::time::Duration = {
32    // See: https://stackoverflow.com/questions/3468607/why-does-settimeout-break-for-large-millisecond-delay-values
33    static I32_MAX_U64: u64 = 2_147_483_647;
34    core::time::Duration::from_millis(I32_MAX_U64)
35};
36
37#[doc(hidden)]
38pub mod polyfill {
39    use bevy_tasks::ConditionalSend;
40    use bevy_tasks::futures_lite::Stream;
41
42    /// The missing conditional send stream trait.
43    /// see: <https://github.com/bevyengine/bevy/issues/22093>
44    pub trait ConditionalSendStream: Stream + ConditionalSend {}
45
46    impl<T: Stream + ConditionalSend> ConditionalSendStream for T {}
47}
48
49pub use polyfill::ConditionalSendStream;