在C#中,我有以下两个简单示例:
第一个示例创建了一个任务,该任务打印“Start”,等待5秒钟打印“Done”,然后结束任务。我等待任务完成,然后打印“All done”。当我运行测试时,它按预期执行。
第二个测试应具有相同的行为,但由于使用了async和await,因此任务内部的等待不会阻塞。但是,此测试仅打印“Start”,然后立即打印“All done”,并且“Done”永远不会被打印。
我不知道我为什么会得到这种行为:S非常感谢您的任何帮助 :)
[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");
}
第一个示例创建了一个任务,该任务打印“Start”,等待5秒钟打印“Done”,然后结束任务。我等待任务完成,然后打印“All done”。当我运行测试时,它按预期执行。
第二个测试应具有相同的行为,但由于使用了async和await,因此任务内部的等待不会阻塞。但是,此测试仅打印“Start”,然后立即打印“All done”,并且“Done”永远不会被打印。
我不知道我为什么会得到这种行为:S非常感谢您的任何帮助 :)
Task.Wait()
。 - Gusdor