为了对异步编程和await
,我想知道这两个代码片段在多线程以及执行顺序和时间上有什么区别:
This:
public Task CloseApp()
{
return Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
与此相对:
public async Task CloseApp()
{
await Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
如果我在这个例程中调用它:
private async void closeButtonTask()
{
// Some Task 1
// ..
await CloseApp();
// Some Task 2
// ..
}
它几乎是相同的(在线程等方面)。但对于第二个(使用await
)编译器将产生更多的开销。
方法声明为async
并使用await
被转换成状态机由编译器。所以当你点击await
,控制流返回到调用方法并执行您的async
方法在之后恢复await
当等待的时候Task
已完成。
由于您之后没有更多代码await
,没有必要使用await
反正。只需返回Task
足够。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)