1 个不稳定版本
0.1.0 | 2022年2月26日 |
---|
#1668 在 异步
94KB
1K SLoC
fut-compat
通过提供一个统一的接口,通过提供它们最重要的功能,实现了tokio
和async_std
运行时的最重要的功能,从而提供tokio和async_std运行时的兼容性。
这个crate的目标是允许开发可以利用由完整的异步运行时提供的所有重要对象(例如File
、TcpListener
等)和函数(例如用于创建新任务的spawn
)的异步crate,而不依赖于具体的运行时。这使下游开发者能够选择最适合他们需求的运行时。
这是通过提供所有重要功能的抽象并使用各自的运行时对象和方法来实现它们来实现的。我们要么使用由rust团队维护的futures
crate提供的现有特质,要么定义我们自己的。
功能
默认情况下不包含特定运行时的实现,以减少需要导入的crate数量。要使用特定的运行时,必须激活相应的功能
功能 | 运行时 |
---|---|
tokio-rt |
tokio |
async-std-rt |
async_std |
示例
futures
crate定义了Spawn
特质,该特质抽象化了tokio
和async_std
运行时提供的spawn
方法,这些方法用于创建新任务。
此crate提供了两个对象TokioExecutor
和AsyncStdExecutor
,它们通过内部调用相应运行时的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
中重导出BufReader
和BufWriter
) - 提供常用辅助函数。(从
futures::io
中重导出) - 添加一个
copy_bidirectional
辅助函数。 - 提供对
Stdout
/Stdin
/Stderr
的异步访问。
- 提供tokio对象与futures io特质的兼容性(例如
- 文件系统
- 提供对所有常用工具函数的访问(例如
create_dir
,read_to_string
等)。 - 提供一个读取目录的通用接口。
- 提供一个通用的
File
接口。 - 提供一个用于以自定义选项打开
File
的通用接口。
- 提供对所有常用工具函数的访问(例如
- 网络
- 提供通用的
TcpListener
/TcpSocket
接口。 - 提供通用的
UnixListener
/UnixSocket
接口。 - 提供一个通用的
UdpSocket
接口。
- 提供通用的
- 进程管理
- 允许启动新进程。
- 允许终止启动的进程。
- 提供一个通用的
Command
接口。 - 提供对启动进程的
Stdout
/Stdin
/Stderr
的异步访问。 - 读取/发送信号。
- 文档
- 提供基本文档。
- 提供更详细的文档。
- 在各个地方添加示例。
许可证
本库采用MIT许可证。
贡献
除非你明确说明,否则你提交给本库的任何有意包含的贡献,都应作为MIT许可证,不附加任何额外条款或条件。
依赖项
~1–12MB
~140K SLoC