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
и других компонентов помогает повысить производительность приложений и упростить управление многопоточностью.