Многопоточность — свойство платформы (например, операционной системы, виртуальной машины и т. д.) или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. Подробнее об основах работы с потоками в этой статье.
Для чего это нужно?
Сутью многопоточности является квазимногозадачность на уровне одного исполняемого процесса, то есть все потоки выполняются в адресном пространстве процесса. Кроме этого, все потоки процесса имеют не только общее адресное пространство, но и общие дескрипторы файлов. Выполняющийся процесс имеет как минимум один (главный) поток. Благодаря такой системе, мы можем грубо говоря одновременно реализовывать несколько задач. Пример: загрузка данных во время работы пользователя с интерфейсом, без многопоточности эти действия выполнялись бы последовательно и интерфейс блокировался.
Реализация в C#
Для работы с потоками в C# реализован функционал в пространстве имен System.Threading. Однако данное решение на данный момент не актуально, т.к. Microsoft создала улучшенный инструмент для работы с многопоточностью и параллельным программированием: System.Threading.Tasks. Далее будем работать с этой библиотекой.
Возможности Task
- Асинхронное программирование. Удобная реализация работы с функционалом, который необходимо вынести из основного потока.
- Текущее состояние. У Task есть свойства получения текущего состояния.
- Вложенные задачи. Возможность запускать новую задачу из текущей.
- Задачи продолжения. Методы продолжения после выполнения текущего Task.
- Параллельный запуск. Возможность запустить список задач одновременно (параллельно).
- Возможность отмены. Реализована работа с CancellationToken.
Подробнее о работе Task с примерами в следующих статьях.
Телеграмм канал: https://t.me/dotnetreview
Источники: Многопоточность Wiki