почему task.run не печатает вывод в порядке выполнения в c # - PullRequest
0 голосов
/ 26 сентября 2018
       Thread.CurrentThread.Name = "Main";
        // Define and run the task.
        Task taskA = Task.Run(() => Console.WriteLine("Hello from taskA."));
        // Output a message from the calling thread.
        Console.WriteLine("Hello from thread '{0}'.",
                            Thread.CurrentThread.Name);
        taskA.Wait();

почему «привет из задачи A» печатается после «Привет из потока Main»

1 Ответ

0 голосов
/ 26 сентября 2018

Task.Run создает новый шаг, чтобы выполнить код, который вы передали из него.Планируется, что эту работу выполнит TaskScheduler и, скорее всего, некоторые вещи по управлению потоками в глубине .NET и ОС.Какой код на самом деле выполняется первым, вероятно, является недетерминированным (т. Е. Это не может быть гарантировано), и он называется «условием гонки».Однако на практике накладные расходы на запуск нового потока и выполнение вашего кода почти наверняка всегда будут занимать больше времени, чем исходный поток, для выполнения следующей строки.Так что в этом 'экземпляре' он, вероятно, всегда будет выполняться вторым.

...