我的一位同事发现我们的代码存在问题,需要花费一段时间才能查明发生了什么,但可以通过以下简单示例最好地演示:使用Task.Run()写入控制台失败
// 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();
}
}
从这个问题可以清楚地看出,从主线程的任何位置写入控制台都会允许后台线程写入控制台,但我们正在努力理解为什么发生这种情况。任何人都可以解释从主线程向控制台写入的内容是否实现了第一个片段不会呢?
你没有描述你的失败案件会发生什么。在我的盒子里,它似乎一直挂着,直到你打回来,然后打印。 –
@JonSkeet是的,这是我看到的行为 – kevinawalker