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 异步
1,573 每月下载量
在 不到 11 个 crate 中使用
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(())
}
请注意,某些类型的构造函数需要在上下文中进行。例如,这包括 TcpStream
和 delay_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