Crates.io | tokio_safe_block_on |
lib.rs | tokio_safe_block_on |
version | 0.2.0 |
source | src |
created_at | 2020-04-21 18:30:59.674729 |
updated_at | 2020-06-24 18:47:00.596706 |
description | Provides the ability to execute async code from a sync context, without blocking a tokio core thread or busy looping the cpu. |
homepage | |
repository | https://github.com/neonphog/tokio_safe_block_on |
max_upload_size | |
id | 232646 |
size | 23,112 |
Provides the ability to execute async code from a sync context, without blocking a tokio core thread or busy looping the cpu.
#[tokio::main(threaded_scheduler)]
async fn main() {
// we need to ensure we are in the context of a tokio task
tokio::task::spawn(async move {
// some library api may take a sync callback
// but we want to be able to execute async code
(|| {
let r = tokio_safe_block_on::tokio_safe_block_on(
// async code to poll synchronously
async move {
// simulate some async work
tokio::time::delay_for(
std::time::Duration::from_millis(2)
).await;
// return our result
"test"
},
// timeout to allow async execution
std::time::Duration::from_millis(10),
).unwrap();
// note we get the result inline with no `await`
assert_eq!("test", r);
})()
})
.await
.unwrap();
}