【发布时间】:2015-01-04 02:28:37
【问题描述】:
在 C# 中我有以下两个简单的例子:
[Test]
public void TestWait()
{
var t = Task.Factory.StartNew(() =>
{
Console.WriteLine("Start");
Task.Delay(5000).Wait();
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
[Test]
public void TestAwait()
{
var t = Task.Factory.StartNew(async () =>
{
Console.WriteLine("Start");
await Task.Delay(5000);
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
第一个示例创建一个打印“开始”的任务,等待 5 秒打印“完成”,然后结束该任务。我等待任务完成,然后打印“全部完成”。当我运行测试时,它按预期运行。
第二个测试应该具有相同的行为,只是由于使用了 async 和 await,Task 内部的等待应该是非阻塞的。但是这个测试只打印“开始”,然后立即“全部完成”,永远不会打印“完成”。
我不知道为什么会出现这种行为:S 任何帮助将不胜感激 :)
【问题讨论】:
-
Task.Delay 是非阻塞的。我看不出你为什么要使用第二个构造。
-
@RoyDictus 他们都有自己的问题。你永远不应该打电话给
Task.Wait() -
在 Main() 方法中不能使用“等待”。您必须使用 Wait() 或旧的 Thread.Sleep()。
标签: c# asynchronous task wait async-await