7

让我们考虑这段代码:

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

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

4

2 回答 2

2

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

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

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

于 2012-10-23T11:16:02.883 回答
0

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

于 2012-10-23T09:01:07.437 回答