Console.ReadLine();
Вот как выглядит вывод:
***** Primary Thread stats *****
ID of current thread: 1
Thread Name: ThePrimaryThread
Has thread started?: True
Priority Level: Normal
Thread State: Running
Свойство Name
Обратите внимание, что класс Thread
Name. Если значение Name не было установлено, тогда будет возвращаться пустая строка. Однако назначение конкретному объекту Thread дружественного имени может значительно упростить отладку. Во время сеанса отладки в Visual Studio можно открыть окно Threads (Потоки), выбрав пункт меню Debug►Windows►Threads (Отладка► Окна►Потоки). На рис. 15.1 легко заметить, что окно Threads позволяет быстро идентифицировать поток, который нужно диагностировать.Свойство Priority
Далее обратите внимание, что в типе Thread
Priority. По умолчанию все потоки имеют уровень приоритета Normal. Тем не менее, в любой момент жизненного цикла потока его можно изменить, используя свойство Priority и связанное с ним перечисление System.Threading.ThreadPriority:public enum ThreadPriority
{
Lowest,
BelowNormal,
Normal, // Стандартное значение.
AboveNormal,
Highest
}
В случае присваивания уровню приоритета потока значения, отличающегося от стандартного(ThreadPriority.Normal
ThreadPriority.Highest не обязательно гарантированно получит наивысший приоритет.Опять-таки, если планировщик потоков занят решением определенной задачи (например, синхронизацией объекта, переключением потоков либо их перемещением), то уровень приоритета, скорее всего, будет соответствующим образом изменен. Однако при прочих равных условиях среда .NET Core Runtime прочитает эти значения и проинструктирует планировщик потоков о том, как лучше выделять кванты времени. Потоки с идентичными уровнями приоритета должны получать одинаковое количество времени на выполнение своей работы.
В большинстве случаев необходимость в прямом изменении уровня приоритета потока возникает редко (если вообще возникает). Теоретически можно так повысить уровень приоритета набора потоков, что в итоге воспрепятствовать выполнению низкоприоритетных потоков с их запрошенными уровнями (поэтому соблюдайте осторожность).
Ручное создание вторичных потоков
Когда вы хотите программно создать дополнительные потоки для выполнения какой-то единицы работы, то во время применения типов из пространства имен System.Threading
1. Создать метод, который будет служить точкой входа для нового потока.
2. Создать новый делегат ParametrizedThreadStart
ThreadStart), передав его конструктору адрес метода, который был определен на шаге 1.3. Создать объект Thread
ParametrizedThreadStart/Threadstart.4. Установить начальные характеристики потока (имя, приоритет и т.д.).
5. Вызвать метод Thread.Start()
Согласно шагу 2 для указания на метод, который будет выполняться во вторичном потоке, можно использовать два разных типа делегата. Делегат ThreadStart
Ограничение ThreadStart
ParametrizedThreadStart позволяет передать единственный параметр типа System.Object. Учитывая, что с помощью System.Object представляется все, что угодно, посредством специального класса или структуры можно передавать любое количество параметров. Однако имейте в виду, что делегаты ThreadStart и ParametrizedThreadStart могут указывать только на методы, возвращающие void.Работа с делегатом ThreadStart