You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MVVM Toolkit中向AsyncRelayCommand传递匿名函数的正确方式是什么?

MVVM Toolkit中AsyncRelayCommand传递匿名函数的正确方式

针对你给出的两种写法,结论是:Approach1写法更优,Approach2功能可行但冗余,具体原因如下:

核心差异解析

AsyncRelayCommand的构造函数接收的是Func<Task>类型的参数——本质只要求返回一个Task对象即可:

  • Approach1:new AsyncRelayCommand(() => SomeAsyncMethod(parameter))
    直接返回SomeAsyncMethod执行后的Task,没有额外的编译器生成代码,写法简洁且无多余性能开销,是最推荐的方式。
  • Approach2:new AsyncRelayCommand(async () => await SomeAsyncMethod(parameter))
    用async/await包裹后,编译器会生成额外的异步状态机。虽然功能上完全正常,但属于没必要的包装——因为SomeAsyncMethod本身已经返回Task,不需要再通过await拆包后重新封装成Task。

特殊场景说明

如果你的匿名函数里除了调用异步方法,还需要执行其他同步逻辑,比如:

new AsyncRelayCommand(async () => {
    // 同步逻辑:比如更新UI状态、参数校验等
    IsBusy = true;
    await SomeAsyncMethod(parameter);
    IsBusy = false;
})

这种情况下async/await是必须的,因为需要在异步流程中穿插同步操作。但如果只是单纯转发异步方法的Task,Approach1的写法是最佳选择。

内容的提问来源于stack exchange,提问作者Emilis Vadopalas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:25:15