1 个不稳定版本

0.1.0 2023 年 6 月 7 日

#1693异步

MIT/Apache

5KB
61

Must Done

一个保证完成的实验性 Future。

功能说明

在某些情况下,我们需要确保 Future 被执行并终止,特别是那些在取消时具有副作用的重叠 Future。

例如,在 io_uring 下,因为我们无法保证 Future 被执行,所以我们必须在 IO 接口上传递缓冲区所有权,这使得接口使用起来非常繁琐。

使用这个 Future 包装器,用户可以确信 Future 将在编译时终止。

工作原理

受 dtolnay 的 no-panic 启发,我定义了一个 Future 包装器并在其中放置了一个 Guard。

如果 Future 无法证明已终止,则 Guard 将被丢弃,并且 Guard 的析构函数需要链接到不存在的库,这将在链接期间触发错误;如果 Future 必须终止,则由于死代码消除,将不会使用析构实现。

一些注意事项

  1. 为了确保死代码消除可以正常工作,需要配置更高的优化级别。
  2. 当应用程序崩溃时,Future 也会被丢弃,即使它本身肯定可以终止。因此,用户可能需要设置 panic = "abort" 以避免 Future 因为崩溃而丢失。
[profile.dev]
opt-level = 3
panic = "abort"

依赖关系

~46KB