4 个版本

0.2.0 2021年1月4日
0.1.2 2020年10月23日
0.1.1 2020年10月19日
0.1.0 2020年10月15日

#1615 in 异步

Download history 906/week @ 2024-03-29 854/week @ 2024-04-05 666/week @ 2024-04-12 545/week @ 2024-04-19 654/week @ 2024-04-26 627/week @ 2024-05-03 767/week @ 2024-05-10 767/week @ 2024-05-17 723/week @ 2024-05-24 554/week @ 2024-05-31 519/week @ 2024-06-07 512/week @ 2024-06-14 457/week @ 2024-06-21 323/week @ 2024-06-28 324/week @ 2024-07-05 400/week @ 2024-07-12

1,573 每月下载量
不到 11 crate 中使用

MIT 许可证

15KB
199 代码行

Tokio Compat 0.2

tokio-compat-02 = "0.2"

此 crate 包含了围绕将 Tokio 与其他运行时集成的工具,通过允许上下文附加到 futures 来实现。这允许在其他的执行器上启动 futures,同时仍然使用 Tokio 来驱动它们。如果你需要在没有提供 Tokio 上下文的执行器/运行时中使用基于 Tokio 的库,这可能很有用。

请注意,.compat() 区域允许你使用 两者 Tokio 0.2 和 1 的功能。当你处于 Tokio 0.2 兼容区域时,并不意味着你放弃了 Tokio 1。

基本用法

use hyper::{Client, Uri};
use tokio_compat_02::FutureExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    // This will not panic because we are wrapping it in the
    // Tokio 0.2 context via the `FutureExt::compat` fn.
    client
        .get(Uri::from_static("http://tokio.rs"))
        .compat()
        .await?;

    Ok(())
}

在异步函数中使用

use hyper::{Client, Uri};
use tokio_compat_02::FutureExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // By calling compat on the async function, everything inside it is able
    // to use Tokio 0.2 features.
    hyper_get().compat().await?;
    Ok(())
}

async fn hyper_get() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    // This will not panic because the `main` function wrapped it in the
    // Tokio 0.2 context.
    client
        .get(Uri::from_static("http://tokio.rs"))
        .await?;

    Ok(())
}

请注意,某些类型的构造函数需要在上下文中进行。例如,这包括 TcpStreamdelay_for

use tokio_02::time::delay_for;
use tokio_compat_02::FutureExt;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let duration = std::time::Duration::from_secs(1);

    // Call the non-async constructor in the context.
    let time_future = async { delay_for(duration) }.compat().await;

    // Use the constructed `Delay`.
    time_future.compat().await;

    Ok(())
}

当然,如果周围的异步函数使用 .compat() 调用,上述代码也将有效。

依赖项

~4MB
~63K SLoC