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

7

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

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

在这里,DoAsync启动了一组任务,并在不等待任务完成的情况下返回。每个任务都写入控制台,但在按下键之前不会显示输出。
当我使用Console.ReadLine时,一切正常。所以我很好奇ReadKey()的特殊性。
1个回答

10

根据 Console.ReadKey() 的文档:

ReadKey 方法等待,也就是阻塞发出 ReadKey 方法的线程,直到按下字符或功能键。

实际上它会在 Console.InternalSyncObject 上获取锁,以防止进一步在控制台上进行操作。

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

阅读这篇文章,我猜测您已安装了 .NET 4.5?


非常感谢,我正在寻找更高级别的内容(http://msdn.microsoft.com/en-us/library/w19esh7k.aspx),还有这篇文章。 - Pavel Voronin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接