2012-10-23 175 views
7

让我们来考虑下面的代码:我们是否总是需要使用async关键字?

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

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

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

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

0

如果唯一的等待是最后一个语句(并且您正在等待某个任务,而不是其他某个等待对象),那么您可以跳过它并返回任务。如果将来需要添加异步修改器,很容易。

+0

当然,我可以实现任何方法,但这是意识形态问题。哪种方式是首选,为什么?最佳做法是什么? –

+0

@ A-student:你回答的答案表明你的“await”是多余的,可以跳过。冗余不是喜欢该解决方案的理由吗? –

相关问题