将 AsyncRead 转换为 Stream 时,稳定版上排名较高的生命周期错误

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

这里 MRE:https://gist.github.com/legendiguess/776127783253c6e597be85bc122074f6

我收到以下错误:

error: higher-ranked lifetime error
  --> src/main.rs:27:28
   |
27 |       ) -> Result<(), Error> {
   |  ____________________________^
28 | |         let r = tokio_util::io::StreamReader::new(s);
29 | |         let d = do_stuff(&self.s, r).await.unwrap();
30 | |         Ok(())
31 | |     }
   | |_____^
   |
   = note: could not prove `Pin<Box<[async block@src/main.rs:27:28: 31:6]>>: CoerceUnsized<Pin<Box<(dyn futures::Future<Output = Result<(), std::io::Error>> + std::marker::Send + 'd)>>>`

有人可以解释这个错误以及如何修复它吗?

我尝试添加更多生命周期,将

Impl Stream
更改为
Pin<Box<dyn Stream>>
但没有成功

更新:事实证明,这在夜间成功编译,但在最新的稳定版本(1.70.0)上仍然失败

asynchronous rust async-await rust-tokio
1个回答
0
投票

请参阅以下 Rust 问题。有一些相关的问题,但这是特定于异步的。 https://github.com/rust-lang/rust/issues/102211

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