?
в async
блоках
Как и в async fn
, ?
также может
использоваться внутри async
блоков. Однако
возвращаемый тип async
блоков явно не
указывается. Это может привести тому, что компилятор не сможет
определить тип ошибки async
блока.
Например, этот код:
#![allow(unused)] fn main() { let fut = async { foo().await?; bar().await?; Ok(()) }; }
вызовет ошибку:
error[E0282]: type annotations needed
--> src/main.rs:5:9
|
4 | let fut = async {
| --- consider giving `fut` a type
5 | foo().await?;
| ^^^^^^^^^^^^ cannot infer type
К сожалению, сейчас не способа "задать тип для fut
"
кроме как явно указать возвращаемый тип async
блока. Для обработки этого, используйте "turbofish" оператор для
предоставления типов ошибки и успеха async
блока:
#![allow(unused)] fn main() { let fut = async { foo().await?; bar().await?; Ok::<(), MyError>(()) // <- обратите внимание на явное указание типа }; }