【发布时间】:2015-04-13 15:33:37
【问题描述】:
谁能解释一下这两个块之间的区别。
这个执行大约 2 秒(这意味着等待是异步的。):
[Test]
public async void TestAwait()
{
var sw = new Stopwatch();
sw.Start();
var task = TestAwaiter(5, 2000).ConfigureAwait(false);
var task1 = TestAwaiter(10, 2000).ConfigureAwait(false);
var i = await task;
var j = await task1;
Console.WriteLine(i+j);
Console.WriteLine(Math.Round(sw.Elapsed.TotalSeconds, 0));
Assert.AreEqual(Math.Round(sw.Elapsed.TotalSeconds, 0), 2);
sw.Stop();
}
public async Task<int> TestAwaiter(int num, int waitTimeSec)
{
await Task.Delay(waitTimeSec).ConfigureAwait(false);
return num;
}
这个执行大约 4 秒(这意味着等待是同步的。)
[Test]
public async void TestAwait()
{
var sw = new Stopwatch();
sw.Start();
var i = await TestAwaiter(5, 2000).ConfigureAwait(false);
var j = await TestAwaiter(10, 2000).ConfigureAwait(false);
Console.WriteLine(i+j);
Console.WriteLine(Math.Round(sw.Elapsed.TotalSeconds, 0));
Assert.AreEqual(Math.Round(sw.Elapsed.TotalSeconds, 0), 2);
sw.Stop();
}
public async Task<int> TestAwaiter(int num, int waitTimeSec)
{
await Task.Delay(waitTimeSec).ConfigureAwait(false);
return num;
}
我无法理解它们有何不同。为什么稍后分配等待任务然后创建它会影响执行顺序。
【问题讨论】:
-
您使用的是什么测试运行器?如果您的测试方法是
async void,那么测试运行程序如何跟踪正在运行的任务? -
NUnit,完美运行。
标签: c# asynchronous async-await task-parallel-library task