【发布时间】:2015-05-06 18:57:28
【问题描述】:
我正在从教程中学习 TPL(异步/等待),并尝试使用控制台应用程序自己对其进行测试。请不要因为我的无知而生气。 我确定我在某处做错了-我编写了以下代码:
static void Main(string[] args_)
{
Task<int> task = ProcessNumber(25);
Console.WriteLine(string.Format("{0}: Waiting started...", DateTime.Now));
task.Wait();
Console.WriteLine(string.Format("{0}: Waiting ended...", DateTime.Now));
Console.WriteLine(task.Result);
Console.WriteLine("Press any key to terminate!");
Console.ReadLine();
}
static async Task<int> ProcessNumber(int i_)
{
Thread.Sleep(1000);
var integer = await IncrementNumber(i_ * 23);
return integer;
}
static async Task<int> IncrementNumber(int j_)
{
Thread.Sleep(6000);
return (j_ + 23) / 23;
}
这是纯 C# 控制台代码。 我的问题是为什么我会得到以下输出:
3/5/2015 5:22:37 PM: Waiting started...
3/5/2015 5:22:37 PM: Waiting ended...
26
“等待开始”和“等待结束”之间不应该有相当大的时间间隔吗?
更新
得到答案后,我发现 Task.Delay(..) 和 Thread.Sleep(..) 不一样,因为它们的工作方式非常不同。 这是一个很好的link,用一个例子来解释。
似乎将 TPL 视为另一个多线程框架是错误的。所有的答案都对我有帮助,所以我投了所有的票。但是,我选择 Jon 的答案,因为它最具说明性,也是第一个出现的答案。 谢谢大家!
【问题讨论】:
-
始终注意编译器警告。对于这段代码,编译器会给你一个警告,告诉你到底出了什么问题。
标签: c# task-parallel-library async-await .net-4.5 c#-5.0