#async-await #async-std #async #tokio #compatibility #future

fut-compat

提供tokio和async_std运行时的兼容性

1 个不稳定版本

0.1.0 2022年2月26日

#1668异步

MIT 许可证

94KB
1K SLoC

fut-compat

Crates.io docs.rs MIT licensed

通过提供一个统一的接口,通过提供它们最重要的功能,实现了tokioasync_std运行时的最重要的功能,从而提供tokio和async_std运行时的兼容性。

这个crate的目标是允许开发可以利用由完整的异步运行时提供的所有重要对象(例如FileTcpListener等)和函数(例如用于创建新任务的spawn)的异步crate,而不依赖于具体的运行时。这使下游开发者能够选择最适合他们需求的运行时。

这是通过提供所有重要功能的抽象并使用各自的运行时对象和方法来实现它们来实现的。我们要么使用由rust团队维护的futures crate提供的现有特质,要么定义我们自己的。

功能

默认情况下不包含特定运行时的实现,以减少需要导入的crate数量。要使用特定的运行时,必须激活相应的功能

功能 运行时
tokio-rt tokio
async-std-rt async_std

示例

futures crate定义了Spawn特质,该特质抽象化了tokioasync_std运行时提供的spawn方法,这些方法用于创建新任务。

此crate提供了两个对象TokioExecutorAsyncStdExecutor,它们通过内部调用相应运行时的spawn方法来实现Spawn特质。现在您可以编写内部需要以某种方式创建新任务但又不依赖于特定运行时的代码。

use futures::task::{Spawn, SpawnExt, SpawnError};
// Replace with AsyncStdExecutor for making use of the async_std runtime instead.
use fut_compat::task::TokioExecutor;


struct MustStartBackgroundTasks<E> {
    executor: E,
}

impl<E> MustStartBackgroundTasks<E>
where
    E: Spawn,
{
    async fn add(&self, x: u64, y: u64) -> Result<u64, SpawnError> {
        // Start a new task, just like you would with e.g. `tokio::spawn`.
        // `spawn_with_handle` must be used if you want to get a return value
        // from the task.
        let handle = self.executor.spawn_with_handle(async move {
            let z = x + y;

            z
        })?;

        let z = handle.await;

        Ok(z)
    }
}

// Replace with [async_std::main] if needed so.
#[tokio::main]
async fn main() {
    let executor = TokioExecutor::default();

    let main_object = MustStartBackgroundTasks {
        executor,
    };

    let z = main_object.add(2, 2).await.unwrap();

    println!("2 + 2 = {}", z);
}

待办事项

  • 任务管理
    • 使能够创建新任务。
    • 使能够创建新的阻塞任务。
    • 使能够取消任务。
    • 提供对恐慌任务的优雅处理。(与tokio不同,asnyc-std似乎不支持此功能)
  • IO
    • 提供tokio对象与futures io特质的兼容性(例如AsyncRead等)。
    • 提供同步IO特质与异步IO特质的兼容性。(从futures::io中重导出AllowStdIo
    • 提供缓冲读取/写入。(从futures::io中重导出BufReaderBufWriter
    • 提供常用辅助函数。(从futures::io中重导出)
    • 添加一个copy_bidirectional辅助函数。
    • 提供对Stdout/Stdin/Stderr的异步访问。
  • 文件系统
    • 提供对所有常用工具函数的访问(例如create_dirread_to_string等)。
    • 提供一个读取目录的通用接口。
    • 提供一个通用的File接口。
    • 提供一个用于以自定义选项打开File的通用接口。
  • 网络
    • 提供通用的TcpListener/TcpSocket接口。
    • 提供通用的UnixListener/UnixSocket接口。
    • 提供一个通用的UdpSocket接口。
  • 进程管理
    • 允许启动新进程。
    • 允许终止启动的进程。
    • 提供一个通用的Command接口。
    • 提供对启动进程的Stdout/Stdin/Stderr的异步访问。
    • 读取/发送信号。
  • 文档
    • 提供基本文档。
    • 提供更详细的文档。
    • 在各个地方添加示例。

许可证

本库采用MIT许可证

贡献

除非你明确说明,否则你提交给本库的任何有意包含的贡献,都应作为MIT许可证,不附加任何额外条款或条件。

依赖项

~1–12MB
~140K SLoC