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

A-s*_*ent 7 .net asynchronous async-await

我们考虑一下这段代码:

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

}

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

任何这些方法都可以像:

await TheBestMethodEverX();
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ary 2

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

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

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