Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
My_shpory_Ivan_Ivanich (2).docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
149.35 Кб
Скачать

17. Высокоуровневые средства распараллеливания задач, класс Task

В эпоху многоядерных машин, которые позволяют параллельно выполнять сразу несколько процессов, стандартных средств работы с потоками в .NET уже оказалось недостаточно. Поэтому одним из новшеств платформы .NET 4.0 стала библиотека параллельных задач TPL (Task Parallel Library).

Библиотека параллельных задач (TPL) представляет собой набор открытых типов и API-интерфейсов в пространствах имен System.Threading и System.Threading.Tasks. Цель TPL — повышение производительности труда разработчиков за счет упрощения процедуры добавления параллелизма в приложения. TPL динамически масштабирует степень параллелизма для наиболее эффективного использования всех доступных процессоров. Кроме того, в библиотеке параллельных задач осуществляется секционирование работы, планирование потоков в пуле ThreadPool, поддержка отмены, управление состоянием и выполняются другие низкоуровневые задачи. Используя библиотеку параллельных задач, можно повысить производительность кода, сосредоточившись на работе, для которой предназначена программа.

Task - класс

Экземпляры Task могут быть созданы различными способами. Наиболее распространенный подход с помощью свойства Factory задачи для извлечения экземпляра TaskFactory, который можно использовать для создания задачи для нескольких целей. Например, для создания задачи Task, выполняющей действие, можно использовать метод StartNew свойства Factory:

var t = Task.Factory.StartNew(() => DoAction());

t.Start();

Более полные примеры содержатся в разделе Параллелизм задач (библиотека параллельных задач).

Класс Task также предоставляет конструкторы, которые инициализируют задачу, но не планируют ее выполнение. Для повышения производительности метод StartNew свойства Factory должен быть предпочитаемым механизмом для создания и планирования вычислительных задач, но для сценариев, где необходимо разделять создание и планирование, могут использоваться конструкторы, а метод Start задачи может затем использоваться для планирования задачи, которая будет выполнена позднее.

Для операций, которые возвращают значения, следует использовать класс Task<TResult>.

Task<TResult> - класс

Представляет асинхронную операцию, которая может вернуть значение.

var t = Task<int>.Factory.StartNew(() => GenerateResult());

int result = t.Result;

СВОЙСТА И МЕТОДЫ КЛАССА TASK В ВОПРОСЕ №18

18. Свойства и методы класса Task

Свойства

Имя

Описание

AsyncState

Возвращает объект состояния, предоставленный при создании задачи Task, или значение NULL, если объект не предоставлен.

CreationOptions

Возвращает объект TaskCreationOptions, использованный при создании данной задачи.

CurrentId

Возвращает уникальный идентификатор выполняющейся в настоящее время задачи Task.

Exception

Возвращает объект AggregateException, который привел к преждевременному завершению задачи Task. Если задача Task завершилась успешно или еще не создала ни одного исключения, возвращает значение null.

Factory

Предоставляет доступ к методам фабрики для создания экземпляров Task и Task<TResult>.

Id

Возвращает уникальный идентификатор данного экземпляра Task.

IsCanceled

Возвращает значение, указывающее, завершилось ли выполнение данного экземпляра Task из-за отмены.

IsCompleted

Возвращает значение, которое показывает, завершилась ли задача Task.

IsFaulted

Возвращает значение, указывающее, завершилась ли задача Task из-за необработанного исключения.

Status

Возвращает состояние TaskStatus данной задачи.

Методы

Имя

Описание

ContinueWith(Action<Task>)

Создает продолжение, которое выполняется асинхронно после завершения выполнения целевой задачи Task.

Delay(Int32)

Создает задачу, которая будет завершена после некоторой временной задержки.

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса Task.

FromResult<TResult>

Создает Task<TResult>, которая завершается удачно с указанным результатом.

Run(Action)

Помещает переданную задачу для выполнения в очередь ThreadPool и возвращает дескриптор этой задачи.

Run(Func<Task>)

Ставит в очередь заданную работу для запуска в ThreadPool и возвращает прокси для задачи, возвращаемой функцией function.

RunSynchronously()

Синхронно выполняет задачу Task в текущем планировщике TaskScheduler.

Start()

Запускает задачу Task, планируя ее выполнение в текущем планировщике TaskScheduler.

Wait()

Ожидает завершения выполнения объекта Task.

WaitAll(Task[])

Ожидает завершения выполнения всех указанных объектов Task.

WaitAny(Task[])

Ожидает завершения выполнения любого из указанных объектов Task.

WhenAll(IEnumerable<Task>)

Создает задачу, которая будет выполнена после выполнения всех предоставленных задач.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]