The Task Parallel Library (TPL) provides high-level tools for parallelism and concurrency beyond simple async/await.
// CPU-bound parallel work
Parallel.For(0, 10, i =>
{
Console.WriteLine($"Processing item {i} on thread {Thread.CurrentThread.ManagedThreadId}");
});
var files = Directory.GetFiles("images", "*.png");
Parallel.ForEach(files, file =>
{
// Resize each image in parallel
ProcessImage(file);
});
public static async Task<int> HeavyComputationAsync(int input)
{
// Offload CPU work to a thread pool thread
return await Task.Run(() =>
{
int result = 0;
for (int i = 0; i < input; i++) result += i;
return result;
});
}
int sum = await HeavyComputationAsync(1_000_000);
Console.WriteLine(sum);
public static async IAsyncEnumerable<int> GenerateAsync()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(100); // simulate async source
yield return i;
}
}
await foreach (int value in GenerateAsync())
Console.WriteLine(value);