这个问题的解决方法是使用tokio::stream::StreamExt的fold_async()函数。
示例代码:
使用fold_async()函数解决Async move closure vs. fold问题
use tokio::stream::StreamExt;
#[tokio::main]
async fn main() {
let stream = tokio_stream::iter(vec![1, 2, 3]);
let sum = stream
.fold_async(0, |acc, item| async move { acc + item })
.await;
println!("sum: {}", sum);
}
这个示例代码使用了fold_async()函数,将一个异步闭包与acc累加器一起使用。异步闭包使用了move语义,保证了item的所有权在运行时被正确地转移了。