我们是否总是需要使用async关键字?

时间:2012-10-23 08:47:51

标签: .net asynchronous async-await

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

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();

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

2 个答案:

答案 0 :(得分:2)

  

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

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

有关详细信息,请观看经典的Zen of Async视频。

答案 1 :(得分:0)

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