#future #completion #stream #execute #another #data-channel #async

futures-finally

在 future 或 stream 完成后执行,无论结果如何的一个实用工具

3 个版本

0.1.0-alpha.22024 年 7 月 1 日

#342 in 异步

每月 36 次下载

Apache-2.0 OR MIT

14KB
298

futures-finally

一个小型实用工具,提供了两个函数,用于在 future 或 stream 完成后执行 future。

动机

我编写这个小库是因为想要在 future 或 stream 完成后执行特定的异步代码。这可能包括等待另一个 future、通过通道发送数据等。

示例

Future 示例

use futures_finally::future::ThenFinallyFutureExt;

fn main() {
    futures::executor::block_on(async move {
        let mut val = 0;

        futures::future::ready(())
            .then_finally(|| async {
                val = 1;
            })
            .await;

        assert_eq!(val, 1);
    });
}

Stream 示例

use futures::StreamExt;
use futures_finally::stream::FinallyStreamExt;

fn main() {
    futures::executor::block_on(async move {
        let mut val = 0;

        let st = futures::stream::once(async { 0 }).finally(|| async {
            val = 1;
        });

        futures::pin_mut!(st);

        while let Some(v) = st.next().await {
            assert_eq!(v, 0);
        }

        assert_eq!(val, 1);
    });
}

MSRV

最低支持的 Rust 版本是 1.75,将来可能会改变。无法保证此库在旧版本的 Rust 上能正常工作。

许可证

根据您的选择,此库受 Apache 许可证,版本 2.0MIT 许可证 许可。

除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何有意包含在作品中的贡献,都应如上所述双重许可,而不附加任何其他条款或条件。

依赖项

~1–1.6MB
~32K SLoC