首页 > 解决方案 > 为什么 OnCompleted 不在 Visual Studio 上运行,而是在 LINQPad 上运行?

问题描述

我试图了解异步是如何在内部实现的。据我了解 OnCompleted() 没有阻塞。这两行在 linqpad 上“正确”执行。
但是,在 Visual Studio 上,我看不到:“这将在之后完成”,即使使用Task.Delay(5000).Wait()

Task.Delay(5000)
    .GetAwaiter()
    .OnCompleted(() => Console.WriteLine("This will be done after"));

Console.WriteLine("This will be done first");

标签: c#

解决方案


在控制台应用程序中,您需要让控制台等待另一次读取,因此您必须Console.ReadLine()在代码末尾使用以等待另一次读取,如下所示:

 static void Main(string[] args)
        {

            Task.Delay(5000).GetAwaiter()
            .OnCompleted(() => Console.WriteLine("This will be done after"));

            Console.WriteLine("This will be done first");
            Console.ReadLine();
        }

推荐阅读