【问题标题】:Do we always need to use async keyword?我们总是需要使用 async 关键字吗?
【发布时间】:2012-11-20 00:12:55
【问题描述】:

让我们考虑一下这段代码:

public async Task TheBestMethodEver1()
{
// code skipped
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
  // code skipped
});

}

public Task TheBestMethodEver2()
{
  // code skipped
  return Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  {
    // code skipped
  }).AsTask();
}

这些方法中的任何一个都可以这样调用:

await TheBestMethodEverX();

这两种方法有什么区别,为什么我通常要使用第一种?

【问题讨论】:

    标签: .net asynchronous async-await


    【解决方案1】:

    这两种方法有什么区别,为什么我通常要使用第一种?

    第一个具有编译器生成的状态机并在堆上创建额外的垃圾。因此第二个是首选。

    如需了解更多信息,请观看经典的Zen of Async 视频。

    【讨论】:

      【解决方案2】:

      如果唯一的 await 是最后一条语句(并且您正在等待一个任务,而不是其他一些可等待的对象),您也可以跳过它并返回任务。如果将来需要,添加 async 修饰符很容易。

      【讨论】:

      • 当然,我可以实现任何方法,但这是意识形态问题。首选哪种方式,为什么?最佳做法是什么?
      • @A-student:您回复的答案表明您的await 是多余的,可以跳过。冗余不是偏爱该解决方案的好理由吗?
      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2013-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 2016-07-27
      相关资源
      最近更新 更多