我的一位同事发现我们的代码存在问题,花了一段时间才查明到底发生了什么,但这个简单的例子可以很好地证明这一点:
// Fails
class Program
{
static void Main(string[] args)
{
Task.Run(() => Console.WriteLine("Hello World"));
Console.ReadKey();
}
}
// Works fine
class Program
{
static void Main(string[] args)
{
Console.Write(String.Empty);
Task.Run(() => Console.WriteLine("Hello World"));
Console.ReadKey();
}
}
玩这个很明显,从主线程的任何地方写入控制台都将允许后台线程也写入控制台,但我们正在努力理解为什么会发生这种情况。谁能解释从主线程向控制台写入的内容是第一个片段没有实现的吗?