我试图了解内部如何实现异步。据我所知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");
答案 0 :(得分:1)
在控制台应用程序中,您需要让控制台等待另一个读取,因此您必须在代码末尾使用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();
}