Задать вопрос
Ogoun
@Ogoun
Programmer

Непонятки с многопоточностью

Вариант первый:

            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();
        }
    }
}
  • Вопрос задан
  • 2956 просмотров
Подписаться 4 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@bleykher
Скопировал ваш код, он работает корректно, то есть выдаёт WTF раз в секунду.
Чем компилите?
Ответ написан
ixSci
@ixSci
я C# не знаю, но есть ли там какой-метод форсированного сброса буфера потока вывода? Если да, то попробуйте использовать его в потоке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы