rust - rust future `try_filter_map`导致 panic : 'async fn resumed after completion'

标签 rust rust-tokio

我有一个生成Result的Stream,我想在这些项目上应用try_filter_map()并采用不会导致错误的第一个项目。
考虑以下示例:(Playground)

use futures::{pin_mut, prelude::*};
use tokio;

#[tokio::main]
async fn main() {
    let s = stream::iter(vec![Ok(1), Ok(2), Ok(3)])
        .try_filter_map(|v| async move { if v == 1 { Err("Ohno!") } else { Ok(Some(v)) } })
        .inspect_err(|err| println!("Error {:?}", err))
        .filter_map(|r| future::ready(r.ok()));
    pin_mut!(s);
    let result = s.next().await;
    println!("{:?}", result);
}
当我运行此代码时,出现以下错误:
Error "Ohno!"
thread 'main' panicked at '`async fn` resumed after completion'
我对Rust还是很陌生,可以使用一些帮助来解决此问题。

最佳答案

看来这是a bug。在新版本解决该问题之前,您似乎正在使用try_filter_map而不实际过滤流?如果是这种情况,可以改用and_then:

let s = stream::iter(vec![Ok(1), Ok(2), Ok(3)])
  .and_then(|v| future::ready(if v == 1 { Err("Ohno!") } else { Ok(v) }))
  .inspect_err(|err| println!("Error {:?}", err))
  .filter_map(|r| future::ready(r.ok()));

关于rust - rust future `try_filter_map`导致 panic : 'async fn resumed after completion' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64624648/

相关文章:

string - &str 的生命周期使比较变得困难

可以使用 TensorFlow C API 训练 Keras 模型吗?

rust - 为什么 `|_| 1`不满足生存期要求

rust - Rust Playground和本地计算机中reqwest示例的错误

rust - 如何使方法流不可知?

rust - 即使我有#[tokio::main],为什么仍然出现错误 “there is no reactor running, must be called from the context of Tokio runtime”?

rust - 如何在不使用大量内存的情况下将所有stdin写入stdout?

rust - 我如何从 Rust 调用原始地址?

rust - 无法在tokio::fs::File上调用poll_read

rust - 从 channel 读取并使用 poll_fn 和 try_ready 的 Tokio future 永远不会完成