以下两段代码之间是否存在任何概念差异:
async Task TestAsync()
{
await Task.Run(() => DoSomeWork());
}
Run Code Online (Sandbox Code Playgroud)
和
Task TestAsync()
{
return Task.Run(() => DoSomeWork());
}
Run Code Online (Sandbox Code Playgroud)
生成的代码也不同吗?
编辑:为避免混淆Task.Run,类似的情况:
async Task TestAsync()
{
await Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
和
Task TestAsync()
{
return Task.Delay(1000);
}
Run Code Online (Sandbox Code Playgroud)
最新更新:除了接受的答案之外,LocalCallContext处理方式也有所不同:即使没有异步,CallContext.LogicalGetData也会被恢复.为什么?
快问...
为了对异步编程有一些基础的了解,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)