Потоки позволяют программе C# выполнять параллельную обработку, за счет чего появляется возможность одновременного выполнения нескольких операций.
Потоки имеют следующие свойства:
- Потоки позволяют программе выполнять параллельную обработку.
- Пространство имен .NET Framework System.Threading упрощает использование потоков.
- Потоки используют одни и те же ресурсы приложения. Дополнительные сведения см. в разделе Использование потоков и работа с потоками.
По умолчанию программа на языке C# имеет один поток. Однако параллельно основному потоку могут создаваться и использоваться вспомогательные потоки. Эти потоки часто называются рабочими потоками.
Рабочие потоки могут использоваться для выполнения трудоемких или срочных задач без прерывания основного потока. Например, рабочие потоки часто используются в серверных приложениях для выполнения входящих запросов, не дожидаясь завершения выполнения предыдущего запроса. Рабочие потоки также используются для выполнения "фоновых" задач в настольных приложениях, что позволяет основному потоку (который отвечает за элементы пользовательского интерфейса) оставаться доступным для команд пользователя.
Виды потоков
• потоки опорных хранилищ — потоки, жестко привязанные к конкретным типам опорных хранилищ, такие как FileStream или NetworkStream
• потоки-декораторы — наполняют другие потоки, трансформируя данные тем или иным способом, такие как DeflateStream или CryptoStream
Разделение потоков позволяет решить проблемы с пропускной способностью и быстротой ответа системы, однако при этом возникают проблемы совместного использования ресурсов, в частности взаимоблокировки и состояния гонки. Основной функционал для использования потоков в приложении сосредоточен в пространстве имен System.Threading. В нем определен класс, представляющий отдельный поток - класс Thread.
Класс Thread определяет ряд методов и свойств, которые позволяют управлять потоком и получать информацию о нем. В процессе работы потока его статус многократно может измениться под действием методов. Так, в самом начале еще до применения метода Start его статус имеет значение Unstarted. Запустив поток, мы изменим его статус на Running. Вызвав метод Sleep, статус изменится на WaitSleepJoin. А применяя метод Abort, мы тем самым переведем поток в состояние AbortRequested, а затем Aborted, после чего поток окончательно завершится.
Приоритеты потоков располагаются в перечислении ThreadPriority: Lowest, BelowNormal, Normal, AboveNormal, Highest
По умолчанию потоку задается значение Normal. Однако мы можем изменить приоритет в процессе работы программы.