Skip to content

Latest commit

 

History

History
34 lines (27 loc) · 898 Bytes

7-1-? in async Blocks.md

File metadata and controls

34 lines (27 loc) · 898 Bytes

就像async fn中一样,在async块中也一样能够使用?。然而,async块返回的类型不能明确说明的。这可能造成编译器不能推断async块的error类型。

例如,下面代码:

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”运算符为异步块提供成功和错误类型:

let fut = async {
    foo().await?;
    bar().await?;
    Ok::<(), MyError>(()) // <- note the explicit type annotation here
};