Что такое TPL?

«Что такое TPL?» — вопрос из категории Многопоточность, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

TPL (Task Parallel Library) — это набор API в пространстве имен System.Threading.Tasks, введенный в .NET Framework 4.0 для упрощения параллельного и асинхронного программирования. Это современная замена низкоуровневым подходам с использованием Thread и ThreadPool.

Основные компоненты TPL:

  1. Task и Task<TResult> — представляют асинхронную операцию. Это основная единица работы.
  2. Parallel класс — предоставляет статические методы (For, ForEach, Invoke) для простого распараллеливания циклов и операций.
  3. PLINQ (Parallel LINQ) — реализация LINQ, которая автоматически распараллеливает запросы.

Примеры использования:

// 1. Использование Task для асинхронной работы
Task<int> longRunningTask = Task.Run(() => 
{
    // Имитация долгой операции
    Thread.Sleep(1000);
    return 42;
});
// Получение результата (блокирует поток)
int result = longRunningTask.Result;

// 2. Параллельный цикл с Parallel.For
Parallel.For(0, 10, i => 
{
    Console.WriteLine($"Iteration {i} on thread {Thread.CurrentThread.ManagedThreadId}");
});

// 3. Параллельный запрос с PLINQ
var numbers = Enumerable.Range(1, 1000);
var evenNumbers = numbers.AsParallel()
                         .Where(n => n % 2 == 0)
                         .ToList();

Ключевые преимущества TPL:

  • Автоматическое управление потоками: Планировщик задач эффективно использует пул потоков.
  • Поддержка отмены: Интеграция с CancellationTokenSource и CancellationToken.
  • Координация задач: Возможность цепочек (ContinueWith) и ожидания (Task.WaitAll, Task.WhenAll).
  • Интеграция с async/await: Типы Task являются основой для асинхронных операций с ключевыми словами async и await.

TPL — это фундамент для написания эффективного и отзывчивого многопоточного кода в современных .NET-приложениях.