任何人都可以解释一下,也许我错过了一些明显的东西.
这两个案例的行为似乎相同,但事实并非如此.
案例1:
用async Action,一段时间做一些工作来启动一个任务:
var t = Task.Run(async () => { await Task.Delay(2000); });
Run Code Online (Sandbox Code Playgroud)第二个任务等待第一个任务:
var waitingTask = Task.Run(() => { t.Wait(); });
Run Code Online (Sandbox Code Playgroud)等待第二个任务:
waitingTask.Wait();
Run Code Online (Sandbox Code Playgroud)案例2:
Task使用Task构造函数构建一个,传递相同的async Action:
var t = new Task(async () => { await Task.Delay(2000); });
Run Code Online (Sandbox Code Playgroud)启动另一个任务以等待第一个任务(就像在第一个案例中一样):
var waitingTask = Task.Run(() => { t.Wait(); });
Run Code Online (Sandbox Code Playgroud)开始第一项任务:
t.Start();
Run Code Online (Sandbox Code Playgroud)等待第二个任务:
waitingTask.Wait();
Run Code Online (Sandbox Code Playgroud)第一种情况表现如预期:等待任务在第一种情况结束后,在2秒后结束.
第二种情况很奇怪:等待任务很快就会结束,早在第一种情况发生之前.
从两个任务打印消息时很容易看到.第二个任务结束时的打印将显示差异.
我正在使用VS 2015 Preview,它可能使用Roslyn进行编译,如果这很重要的话.