如何将 #[must_use] 应用于异步函数?

Joh*_*ica 5 rust

#[must_use]似乎对异步函数没有影响。此代码不会生成警告:

#[must_use]
async fn launch_missiles() -> u32 {
    42
}

#[tokio::main]
async fn main() {
    launch_missiles().await;
}
Run Code Online (Sandbox Code Playgroud)

游乐场

这是预期的行为,还是语言设计缺陷/编译器错误?

如果这是预期的,我的选择是什么?如果返回类型是#[must_use]这样我已经开始创建一个MustUse<_>包装类型,它就可以正常工作。不过,这似乎有点矫枉过正。我错过了一个更简单的解决方法吗?

Sol*_*cko 0

我认为您当前可以做的最好的事情(无需手动实现async正在执行的操作)是返回#[must_use]包装器类型:

#[must_use]
struct MustUse<T : ?Sized>(T);

#[must_use]
async fn launch_missiles() -> MustUse<u32> {
    MustUse(42)
}

#[tokio::main]
async fn main() {
    launch_missiles().await;
}
Run Code Online (Sandbox Code Playgroud)

操场