Rust async-await:检查列表中是否有将来同时解析为true?

问题描述 投票:1回答:1

我正在尝试在Rust异步等待(同时稳定下来)中同时(而不是按顺序)运行期货列表,直到它们中的任何一个解析为true

想象一下,如果有一个Vec<File>,并且每个文件将来运行时都会产生bool(可能是无序的)。这将是一个简单的序列化实现。

async fn my_function(files: Vec<File>) -> bool {
    // Run the future on each file, return early if we received true
    for file in files {
        if long_future(file).await {
            return true;
        }
    }

    false
}

async fn long_future(file: File) -> bool {
    // Some long-running task here...
}

这可行,但我想同时运行其中的一些期货以加快流程。我遇到了buffer_unordered()(在buffer_unordered()上),但不知道如何实现。

据我所知,假设您提供了多线程池,也可以使用Stream之类的东西同时运行期货。但是我不知道如何在这里有效地使用它。

我尝试过类似的操作,但无法正常工作:

join

此外,我正在寻找迭代器中使用的类似join的东西,以替换if语句或let any_true = futures::stream::iter(files) .buffer_unordered(4) // Run up to 4 concurrently .map(|file| long_future(file).await) .filter(|stop| stop) // Only propagate true values .next() // Return early on first true .is_some(); 组合。

我将如何处理?

concurrency rust async-await
1个回答
2
投票

我认为您应该能够使用any,如Some Guy所述。一个示例,其中我用一堆any替换了文件以进行说明:


0
投票

select_ok的返回类型为u32,其输出类型为:

© www.soinside.com 2019 - 2024. All rights reserved.