Вариант первый:
Task.Factory.StartNew(() =>
{
while (true)
{
Console.WriteLine("WTF");
Thread.Sleep(1000);
}
});
Console.ReadKey();
Вариант второй:
Console.WriteLine("Start");
Task.Factory.StartNew(() =>
{
while (true)
{
Console.WriteLine("WTF");
Thread.Sleep(1000);
}
});
Console.ReadKey();
В первом варианте в консоль так ничего и не выведется, во-втором раз в секунду как и требуется будет выводиться сообщение.
Поведение одинаковое и в debug и в release версиях.
Кто-нибудь понимает почему добавление вывода в консоль в основном потоке разрешает вывод в дочернем?
В MSDN'е пишут:
Потокобезопасность
Данный тип безопасен для использования в многопоточных программах.
Вот полный компилируемый текст программы (в варианте где вывод не работает):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Console.WriteLine("Start");
Task.Factory.StartNew(() =>
{
while (true)
{
Console.WriteLine("WTF");
Thread.Sleep(1000);
}
});
Console.ReadKey();
}
}
}