【发布时间】:2013-09-22 13:08:28
【问题描述】:
最近我遇到了一些使用 async-await 的异步代码。我的问题是下面两个代码块有什么区别 -
代码块 - 1
public async Task Method1(string fileName)
{
await Method2(fileName);
}
public async Task Method2(string filePath)
{
await Task.Run(() =>{
//do some task
});
}
代码块 - 2
public async Task Method1(string fileName)
{
await Method2(fileName);
}
public async Task Method2(string filePath)
{
Task.Run(() =>{
//do some task
});
}
这两个代码的区别在于Method2上的await。当第三种方法(比如 Method3)调用 Method1 时会发生什么?从 Method3 观察到的执行有什么不同?
【问题讨论】:
-
代码 #2 应该给你一个警告,解释到底有什么区别。不要忽略来自编译器的警告。
-
@svick 谢谢。编译器说该方法缺少 await 运算符,将同步运行。现在,想想我提到的方法3。当method3调用method1时,在两种情况下都到达await调用后控制权返回给method3。那么,有什么区别呢?
-
不同之处在于从
Method1返回的Task何时完成。使用#2,它将立即完成(不等待在Task.Run()开始的Task完成)。
标签: c# async-await