1mod tokio;
11
12#[cfg(feature = "backend-experiments")]
13mod dispatch_gate;
14
15#[cfg(feature = "backend-experiments")]
16#[doc(hidden)]
17pub mod experimental;
18
19use crate::tracing::init_tracing;
20
21pub mod affinity;
22
23pub use crate::tasks::tokio::mpsc;
24pub use crate::tasks::tokio::oneshot;
25pub use crate::tasks::tokio::sleep;
26pub use crate::tasks::tokio::timeout;
27pub use crate::tasks::tokio::watch;
28pub use crate::tasks::tokio::CancellationToken;
29pub use crate::tasks::tokio::{
30 block_in_place, spawn, spawn_blocking, task_id, Handle, JoinHandle, Runtime, RuntimeFlavor,
31};
32pub use crate::tasks::tokio::{BroadcastStream, ReceiverStream};
33use std::future::Future;
34
35pub fn worker_runtime(name: &str, workers: usize) -> std::io::Result<Runtime> {
38 ::tokio::runtime::Builder::new_multi_thread()
39 .worker_threads(workers)
40 .thread_name(name)
41 .enable_all()
42 .build()
43}
44
45pub fn control_runtime() -> std::io::Result<Runtime> {
47 ::tokio::runtime::Builder::new_current_thread()
48 .enable_all()
49 .build()
50}
51
52pub fn run<F: Future>(future: F) -> F::Output {
54 init_tracing();
55
56 let rt = Runtime::new().unwrap();
57 rt.block_on(future)
58}
59
60pub fn block_on<F: Future>(future: F) -> F::Output {
63 Handle::current().block_on(future)
64}
65
66pub use crate::tasks::tokio::ctrl_c;