Kha*_*laf 44 c# multithreading asynchronous
快问...
为了对异步编程有一些基础的了解,await
我想知道这两个代码片段在多线程和执行顺序和时间方面有什么区别:
这个:
public Task CloseApp()
{
return Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
Run Code Online (Sandbox Code Playgroud)
对此:
public async Task CloseApp()
{
await Task.Run(
()=>{
// save database
// turn off some lights
// shutdown application
});
}
Run Code Online (Sandbox Code Playgroud)
如果我在这个例程中调用它:
private async void closeButtonTask()
{
// Some Task 1
// ..
await CloseApp();
// Some Task 2
// ..
}
Run Code Online (Sandbox Code Playgroud)
Ren*_*ogt 43
它几乎相同(就线程等而言).但是对于第二个(使用await
),编译器将创建更多的开销.
声明为async
和使用的方法由编译器await
转换为状态机.因此,当您点击时await
,控制流将返回到调用方法,并且在等待完成async
之后,将恢复执行方法.await
Task
由于您之后没有更多代码await
,因此无需使用await
.简单回归Task
就够了.
这两种方法之间的差异很小.基本上,它们具有相同的语义.但是,具有async/await的版本将外部编译器生成的任务中的内部任务的执行包装起来.非异步版本没有.因此,非异步版本(非常简单地)更有效.
归档时间: |
|
查看次数: |
12917 次 |
最近记录: |