Что такое TPL (Task Parallel Library) в C#

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