gpt4 book ai didi

asynchronous - 如何使用 tokio::join 有条件地运行两个函数之一?

转载 作者:行者123 更新时间:2023-12-05 00:51:59 33 4
gpt4 key购买 nike

我需要同时运行 4 个函数,但其​​中一个函数因用户输入而异。

如果我使用“if-else”,由于 Future,我会得到“if and else 有不兼容的类型”。

我看到的唯一方法是创建第三个函数,从其他两个函数中进行选择,但它不允许(据我所知)由于等待而同时运行。

另一种方法是进行两个不同的连接!但这似乎“代码昂贵”。

在这种情况下我该怎么办?

tokio::join!(
self.func1(),
if self.flag() {
self.func2()
} else {
self.func3()
},
self.func4(),
self.func5()
);

函数签名如下:

pub async fn funcN(&self) -> Result<Vec<String>> {

最佳答案

您可以在 async block 中使用 if 来从两个生成单个 future 类型:

tokio::join!(
func1(),
async {
if flag() {
func2().await
} else {
func3().await
}
},
func4(),
func5()
);

这与其他答案的调度略有不同:flag() 调用是 future 的一部分,而不是立即运行。如果这是不可取的,您可以预先将 bool 结果放入变量中。

除此之外,这很像 Either 方法,但可以概括为两个以上的选择。

关于asynchronous - 如何使用 tokio::join 有条件地运行两个函数之一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70730022/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com