【发布时间】:2014-04-20 10:17:04
【问题描述】:
我正在尝试很好地掌握 async/await 并且我想消除一些困惑。有人可以解释一下在执行方面有什么不同:
// version 1
public Task Copy(string source, string destination) {
return Task.Run(() => File.Copy(source, destination));
}
public async Task Test() {
await Copy("test", "test2");
// do other stuff
}
还有:
// version 2
public async Task Copy(string source, string destination) {
await Task.Run(() => File.Copy(source, destination));
}
public async Task Test() {
await Copy("test", "test2");
// ...
}
它们会产生相同的代码吗?为什么我要写一个而不是另一个?
【问题讨论】:
-
@Noseratio 是的,确实如此,Erics 的回答也是一个“大开眼界”,对不起,没有找到任何东西(不确定如何制定搜索:P)
-
@DimitarDimitrov,IMO,除了状态机的开销,最主要的区别是exception propagation logic。
-
@Noseratio 谢谢!极好的答案(你链接的那个)。这很有帮助!
标签: c# asynchronous async-await