Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
{
Lowest,
BelowNormal,
Normal, // Стандартное значение.
AboveNormal,
Highest
}
В случае присваивания уровню приоритета потока значения, отличающегося от стандартного(
ThreadPriority.Normal
ThreadPriority.Highest
Опять-таки, если планировщик потоков занят решением определенной задачи (например, синхронизацией объекта, переключением потоков либо их перемещением), то уровень приоритета, скорее всего, будет соответствующим образом изменен. Однако при прочих равных условиях среда .NET Core Runtime прочитает эти значения и проинструктирует планировщик потоков о том, как лучше выделять кванты времени. Потоки с идентичными уровнями приоритета должны получать одинаковое количество времени на выполнение своей работы.
В большинстве случаев необходимость в прямом изменении уровня приоритета потока возникает редко (если вообще возникает). Теоретически можно так повысить уровень приоритета набора потоков, что в итоге воспрепятствовать выполнению низкоприоритетных потоков с их запрошенными уровнями (поэтому соблюдайте осторожность).
Ручное создание вторичных потоков
Когда вы хотите программно создать дополнительные потоки для выполнения какой-то единицы работы, то во время применения типов из пространства имен
System.Threading
1. Создать метод, который будет служить точкой входа для нового потока.
2. Создать новый делегат
ParametrizedThreadStart
ThreadStart
3. Создать объект
Thread
ParametrizedThreadStart/Threadstart
4. Установить начальные характеристики потока (имя, приоритет и т.д.).
5. Вызвать метод
Thread.Start()
Согласно шагу 2 для указания на метод, который будет выполняться во вторичном потоке, можно использовать два разных типа делегата. Делегат
ThreadStart
Ограничение
ThreadStart
ParametrizedThreadStart
System.Object
System.Object
ThreadStart
ParametrizedThreadStart
void
Работа с делегатом ThreadStart
Чтобы проиллюстрировать процесс построения многопоточного приложения (а также его полезность), создайте проект консольного приложения по имени
SimpleMultiThreadApp
После импортирования пространства имен
System.Threading
Printer
using System;
using System.Threading;
namespace SimpleMultiThreadApp
{
public class Printer
{
public void PrintNumbers()
{
// Вывести информацию о потоке.
Console.WriteLine("-> {0} is executing PrintNumbers()",
Thread.CurrentThread.Name);
// Вывести числа.
Console.Write("Your numbers: ");
for(int i = 0; i < 10; i++)
{
Console.Write("{0}, ", i);
Thread.Sleep(2000);
}
Console.WriteLine();
}
}
}
Добавьте в файл
Program.cs
PrintNumbers()
ThreadStart
PrintNumbers()
Thread
Start()
using System;
using System.Threading;
using SimpleMultiThreadApp;