Task Parallel Library (TPL) — это библиотека в .NET, предназначенная для упрощения работы с асинхронным и параллельным программированием. Она предоставляет удобные API для эффективного управления задачами (Task), потоками (Thread) и обработкой параллельных данных.
Основные возможности TPL
TPL включает в себя несколько ключевых компонентов:
TaskиTask<TResult>— представляют собой асинхронные операции и позволяют управлять их выполнением.Parallel— предоставляет методы для параллельного выполнения циклов и вызова методов.PLINQ(Parallel LINQ) — позволяет выполнять LINQ-запросы в многопоточной среде.CancellationToken— механизм отмены задач.TaskScheduler— управляет планированием выполнения задач.
Использование Task
Для запуска асинхронной задачи используется Task.Run:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
Task task = Task.Run(() => Console.WriteLine("Выполняется задача"));
await task;
}
}Метод await позволяет дождаться завершения задачи без блокировки основного потока.
Параллельное выполнение с Parallel
Parallel предоставляет методы For и ForEach для параллельного выполнения циклов:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
Parallel.For(0, 5, i =>
{
Console.WriteLine($"Итерация {i} выполняется в потоке {Task.CurrentId}");
});
}
}Отмена задач с CancellationToken
Для отмены задач используется CancellationTokenSource:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var cts = new CancellationTokenSource();
Task task = Task.Run(() =>
{
while (!cts.Token.IsCancellationRequested)
{
Console.WriteLine("Задача выполняется");
Task.Delay(500).Wait();
}
}, cts.Token);
await Task.Delay(2000);
cts.Cancel();
await task;
}
}TaskScheduler и настройка выполнения задач
TaskScheduler управляет выполнением задач. По умолчанию используется пул потоков, но можно настроить собственный планировщик:
using System;
using System.Threading.Tasks;
class Program
{
static void Main()
{
var scheduler = TaskScheduler.Default;
Task.Factory.StartNew(() => Console.WriteLine("Задача запущена"), TaskCreationOptions.LongRunning);
}
}TPL предоставляет мощные инструменты для работы с асинхронностью и параллелизмом в C#. Использование Task, Parallel, PLINQ и других компонентов помогает повысить производительность приложений и упростить управление многопоточностью.