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

时间:2013-04-01 12:43:39

标签: .net multithreading task-parallel-library console-application

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

static void Main(string[] args)
{
    DoAsync();
    Console.ReadKey();
}

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

所以我对ReadKey() pecularities感到好奇。

1 个答案:

答案 0 :(得分:9)

来自Console.ReadKey()的{​​{1}}:

  

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

它实际上做的是获取Console.InternalSyncObject上的锁,这会阻止在控制台上进一步操作。

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

阅读the documentation我猜你安装了.NET 4.5?