#tokio #async #tokio-task #core

tokio_safe_for_aingle

从同步上下文执行异步代码,而不阻塞 tokio 核心线程或忙等待 CPU

1 个不稳定版本

0.1.2 2021年2月20日

#2061异步

Apache-2.0

9KB
99

tokio_safe

提供从同步上下文执行异步代码的能力,而不阻塞 tokio 核心线程或忙等待 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::tokio_safe(
                // 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();
}

依赖项

~4.5MB
~65K SLoC