#[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<_>
包装类型,它就可以正常工作。不过,这似乎有点矫枉过正。我错过了一个更简单的解决方法吗?
我认为您当前可以做的最好的事情(无需手动实现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)