Fel*_*lix 4 c# asynchronous async-await async-ctp
我正在使用新的Async CTP位,我无法使用服务器端或命令行程序(并且所有示例都是WPF或Silverlight).例如,一些简单的代码,如:
class Program {
static void Main() {
Program p = new Program();
var s = p.Ten2SevenAsync();
Console.WriteLine(s);
}
private async Task<int> Ten2SevenAsync() {
await TaskEx.Delay(10000);
return 7;
}
}
Run Code Online (Sandbox Code Playgroud)
立即返回并打印System.Threading.Tasks.Task1 [System.Int32]`而不是等待10秒并返回7(正如我所料).必须是我遗失的明显事物.
Mar*_*ell 10
基于await的代码的重点在于它确实"在完成后执行下一个东西"(一个回调),而不是 "阻止当前线程直到完成".
因此,从Ten2SevenAsync您返回任务,但该任务尚未完成.将任务写入控制台并不意味着它等待它完成.如果要阻止任务完成:
static void Main() {
Program p = new Program();
var s = p.Ten2SevenAsync();
Console.WriteLine(s.Result);
}
Run Code Online (Sandbox Code Playgroud)
或更明确地:
static void Main() {
Program p = new Program();
var s = p.Ten2SevenAsync();
s.Wait();
Console.WriteLine(s.Result);
}
Run Code Online (Sandbox Code Playgroud)