为什么Console.ReadKey()阻止在另一个线程中调用Console.WriteLine的输出?

Pav*_*nin 6 .net multithreading console-application task-parallel-library

我有一个非常简单的控制台应用程序

static void Main(string[] args)
{
    DoAsync();
    Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)

这里DoAsync启动任务集并返回不等待任务的完成.每个任务都写入Console,但在按下键之前不显示ouptut.
当我使用Console.ReadLine一切正常.

所以我对ReadKey()小说很好奇.

gre*_*g84 9

该文件Console.ReadKey():

ReadKey方法等待,即发出ReadKey方法的线程上的块,直到按下字符或功能键.

它实际上做的是获得锁定Console.InternalSyncObject,这阻止了对控制台的进一步操作.

Console.ReadLine()方法不会以这种方式阻塞线程.

阅读这篇文章我猜你已经安装了.NET 4.5?