Back to Skills

processing-parallel-tasks

verified

Implements parallel processing using Parallel, PLINQ, and ConcurrentCollections in .NET. Use when processing CPU-bound tasks in parallel or improving multi-core utilization.

View on GitHub

Marketplace

dotnet-claude-plugins

christian289/dotnet-with-claudecode

Plugin

wpf-dev-pack

development

Repository

christian289/dotnet-with-claudecode
5stars

wpf-dev-pack/skills/processing-parallel-tasks/SKILL.md

Last Verified

January 23, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/christian289/dotnet-with-claudecode/blob/main/wpf-dev-pack/skills/processing-parallel-tasks/SKILL.md -a claude-code --skill processing-parallel-tasks

Installation paths:

Claude
.claude/skills/processing-parallel-tasks/
Powered by add-skill CLI

Instructions

# .NET Parallel Processing

A guide for APIs and patterns for parallel processing of CPU-bound tasks.

**Quick Reference:** See [QUICKREF.md](QUICKREF.md) for essential patterns at a glance.

## 1. Core APIs

| API | Purpose |
|-----|---------|
| `Parallel.For`, `Parallel.ForEach` | CPU-bound parallel processing |
| `PLINQ (.AsParallel())` | LINQ query parallelization |
| `Partitioner<T>` | Large data partitioning |
| `ConcurrentDictionary<K,V>` | Thread-safe dictionary |

---

## 2. Parallel Class

### 2.1 Parallel.ForEach

```csharp
public sealed class ImageProcessor
{
    public void ProcessImages(IEnumerable<string> imagePaths)
    {
        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = Environment.ProcessorCount
        };

        Parallel.ForEach(imagePaths, options, path =>
        {
            ProcessImage(path);
        });
    }
}
```

### 2.2 Early Termination

```csharp
Parallel.For(0, data.Length, (i, state) =>
{
    if (data[i] == target)
    {
        state.Break();
    }
});
```

---

## 3. PLINQ

```csharp
var results = data
    .AsParallel()
    .WithDegreeOfParallelism(Environment.ProcessorCount)
    .Where(d => d.IsValid)
    .Select(d => Transform(d))
    .ToList();

// When order preservation is needed
var results = data
    .AsParallel()
    .AsOrdered()
    .Select(d => Process(d))
    .ToList();
```

---

## 4. Thread-Safe Collections

| Collection | Purpose |
|------------|---------|
| `ConcurrentDictionary<K,V>` | Thread-safe dictionary |
| `ConcurrentQueue<T>` | Thread-safe FIFO queue |
| `ConcurrentBag<T>` | Thread-safe unordered collection |

```csharp
// Collecting results during parallel processing
var results = new ConcurrentBag<Result>();

Parallel.ForEach(data, item =>
{
    var result = Process(item);
    results.Add(result);
});
```

---

## 5. ThreadLocal<T>

Prevents contention with thread-local variables

```csharp
private readonly ThreadLocal<StringBuilder> _localBuilder =
    new(() => ne

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
2830 chars