【发布时间】:2015-02-18 15:43:23
【问题描述】:
这两个sn-ps的代码完成时间不同,为什么?第一个需要 3000 毫秒,而第二个只需要 2000 毫秒。我正在运行 .Net framework 4.5 和 Visual Studio 2013 Ultimate。
static void Main(string[] args)
{
var sw = new Stopwatch();
sw.Start();
Task.Run(async () =>
{
var sw2 = new Stopwatch();
sw2.Start();
Task<int> t1 = GetList();
Task<int> t2 = GetList2();
var a = await t1;
var b = await t2;
}).Wait();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
Console.ReadKey();
}
第二次sn-p:
static void Main(string[] args)
{
var sw = new Stopwatch();
sw.Start();
Task.Run(async () =>
{
var sw2 = new Stopwatch();
sw2.Start();
var a = await GetList();
var b = await GetList2();
}).Wait();
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
Console.ReadKey();
}
【问题讨论】:
-
您能否详细解释一下您期望发生的情况、原因以及实际发生的情况?它几乎从来都不是框架中的错误,因此请期待您的期望或您的代码是错误的。
-
var a = await GetList();在GetList完成时等待。 -
2000ms 的暂停是什么意思?这个停顿应该从哪里来?
-
两个示例不应该导致 2000 毫秒的暂停 吗?嗯什么??这个神奇的数字是从哪里来的?
-
我们没有
GetList或GetList2并没有帮助 - 听起来您可能只是看到了开始两个任务然后等待两个任务之间的区别(这意味着第二个在我们等待第一个时运行)与开始/等待,开始/等待,这意味着第二个任务只有在第一个任务完成之后才能开始。
标签: c# asynchronous async-await