Я абсолютно новичок в потоках и стараюсь понять самые основы. У меня этот код с асинхронными делегатами вызовом:C# асинхронные делегаты, планирование потоков
static void Main(string[] args)
{
Action<Thread, string> action = (mainThread, name) =>
{
Thread.CurrentThread.Name = name;
Thread.CurrentThread.IsBackground = false;
Console.WriteLine("Thread {0} starts", Thread.CurrentThread.Name);
while (true)
{
var input = Console.ReadLine();
Console.WriteLine("Thread {0} catches an input. User's input is: \"{1}\""
+"\nMain thread is alive = {2}",
Thread.CurrentThread.Name, input, mainThread.IsAlive);
}
};
action.BeginInvoke(Thread.CurrentThread,"First", null, null);
action.BeginInvoke(Thread.CurrentThread, "Second", null, null);
Thread.Sleep(2000);
}
И все, что я делаю, результат вывода всегда идет в следующем порядке: первый> второго> первого> второго> Первый ...
насколько я понимаю, порядок вывода должен быть nondetermenistic. Бу в этом случае. Как обрабатывается очередь потоков? Что мне не хватает? Пожалуйста, объясните
Если вы хотите, чтобы проверить многопоточность попытаться избежать пользовательского ввода, Я довольно-таки есть замок внутри Console.readline, который заставляет их по очереди. – OopsUser
Они используют одну и ту же консоль. –
Но почему один нить ни разу за один раз не делает дважды print-readline-print-readline? – user3101007