CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

csharp-concurrency-patterns

Choosing the right concurrency abstraction in .NET - from async/await for I/O to Channels for producer/consumer to Akka.NET for stateful entity management. Avoid locks and manual synchronization unless absolutely necessary.

Quality

76%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Fix and improve this skill with Tessl

tessl review fix ./skills/csharp-concurrency-patterns/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

77%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, highly actionable decision guide with executable code for every abstraction level and an unambiguous decision workflow. Its two real weaknesses are redundancy (the same mapping appears as decision tree, table, and escalation diagram) and a progressive-disclosure promise that is broken in practice — advanced-concurrency.md is referenced twice but absent from the bundle.

Suggestions

Ship the missing advanced-concurrency.md file (or remove both references and fold its one-paragraph summary inline) — the link is currently dangling.

Consolidate the three redundant navigation aids (decision tree, Quick Reference table, Escalation Path) into a single one to cut token cost without losing information.

Trim 'The Philosophy' section, which restates the numbered lock-avoidance ladder that appears immediately below it.

DimensionReasoningScore

Conciseness

The body doesn't explain basics Claude already knows and its code examples are lean, but the same tool-to-need mapping is repeated three times (decision tree, 'Quick Reference' table, 'Escalation Path' diagram), and 'The Philosophy' section restates the lock-avoidance ladder that follows it. Mostly efficient but could be tightened by consolidating to one navigational aid. Not 4 because the triple redundancy is more than a minor instance; not 2 because nothing is padded with textbook explanation.

3 / 5

Actionability

Every level provides complete, copy-paste-ready C# (async/await with CancellationToken and Task.WhenAll, Parallel.ForEachAsync with ParallelOptions, bounded Channel with writer/reader lifecycle), and anti-patterns are shown as BAD/GOOD code pairs. Common cases are concretely covered, meeting the fully-executable anchor. The Level 4+ deferral is acceptable since it delegates rather than hand-waves.

5 / 5

Workflow Clarity

This is a single-task decision skill and the decision process is unambiguous: the decision tree covers every entry condition with a fallback branch ('None of the above fits?'), the lock ladder gives an explicit ordered preference (first choice → last resort), and the escalation path sequences escalation from async/await upward. No validation checkpoints are needed since there are no destructive or batch operations; the simple-skill exception applies. Not 4 because nothing is ambiguous or missing a checkpoint for this task type.

5 / 5

Progressive Disclosure

The body is well-structured with a clear 'Reference Files' section and a well-signaled, one-level-deep pointer to advanced-concurrency.md — the right split in principle. However, the referenced file does not exist anywhere in the skill bundle (no references/, scripts/, or assets/ directories, and no advanced-concurrency.md at the root), so the promised navigation target is missing. Scoring against the actual bundle structure, this is a broken reference that undermines navigation: better organized than a 2 (structure is good, reference clearly signaled) but the dangling link is more than the 'minor organization gaps' of a 4.

3 / 5

Total

16

/

20

Passed

Description

66%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A specific, technically credible description with good keyword coverage, undermined by the complete absence of a 'Use when...' trigger clause. Adding explicit trigger guidance would lift it from good to excellent.

Suggestions

Add an explicit trigger clause, e.g. 'Use when working with C#/.NET code involving threading, parallelism, async I/O, or when tempted to use locks, semaphores, or other synchronization primitives.'

Include common natural synonyms users actually say — 'threading', 'parallel', 'Task', 'race condition', 'deadlock', 'C#' — to improve trigger term coverage.

Mention the remaining abstraction levels (Reactive Extensions, Parallel.ForEachAsync, Task.WhenAll) for comprehensive capability coverage.

DimensionReasoningScore

Specificity

The description names the domain ('concurrency abstraction in .NET') and lists several concrete capabilities — 'async/await for I/O', 'Channels for producer/consumer', 'Akka.NET for stateful entity management', 'Avoid locks and manual synchronization' — with only minor gaps (Rx, Parallel.ForEachAsync, Task.WhenAll not mentioned). Not 5 because coverage of the toolset is incomplete; not 3 because it goes beyond 1-2 actions.

4 / 5

Completeness

The 'what' is clear (choose among async/await, Channels, Akka.NET; avoid locks), but there is no 'Use when...' clause or equivalent explicit trigger guidance — the 'when' is only weakly implied by the gerund 'Choosing'. Per the judging guideline, missing explicit trigger guidance caps completeness at 3. Not 4 because the when-clause is absent, not merely underspecified.

3 / 5

Trigger Term Quality

Good natural keyword coverage: 'async/await', 'producer/consumer', 'stateful', 'locks', 'synchronization', 'Channels'. A few natural terms users would say are missing: 'threading', 'parallel', 'race condition', 'deadlock', 'Task', 'C#'. Not 5 because those synonyms are absent; clearly above 3's 'missing common variations'.

4 / 5

Distinctiveness Conflict Risk

The .NET concurrency niche is well-delineated by specific technologies (Akka.NET, System.Threading.Channels, async/await), so wrong-skill triggering is unlikely. Minor overlap risk remains with a hypothetical general C#/.NET or Akka.NET-specific skill. Not 5 because terms like 'async/await' and 'locks' could also appear in non-.NET concurrency contexts.

4 / 5

Total

15

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

relative_links

Relative link issues: 2 missing

Warning

Total

15

/

16

Passed

Repository

Aaronontheweb/dotnet-skills

Path

skills/csharp-concurrency-patterns/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.