我有一个很长的期货清单,我想使用Stream::buffer_unordered/运行它们Stream::buffered。我将这个流合并到一个 future 中for_each,然后用 Tokio 执行它。其中一个期货返回错误是很常见的。根据文档,for_each返回错误时将停止。
当返回这些错误时,如何忽略或只打印一条消息并继续执行后续的 future?
这是与我的情况类似的一般代码:
use futures::stream;
use futures::stream::Stream;
use futures::future::err;
use futures::future::ok;
use tokio;
fn main() {
let queries: Vec<u32> = (0..10).collect();
let futures = queries.into_iter().map(move |num| {
println!("Started {}", num);
// Maybe throw error
let future = match num % 3 {
0 => ok::<u32, u32>(num),
_ => err::<u32, u32>(num)
};
future
});
let stream = stream::iter_ok(futures);
let num_workers = 8;
let future = stream
.buffer_unordered(num_workers)
.map_err(|err| …Run Code Online (Sandbox Code Playgroud)