Tutorials Design Patterns in C#
Retry Pattern — Complete Guide
Retry Pattern — Complete Guide: free step-by-step lesson with examples, common mistakes, and interview tips — part of Design Patterns in C# on Toolliyo Academy.
On this page
Design Patterns in C# · Lesson 33 of 69
Retry Pattern
GoF Core ✓ → Enterprise → Cloud & Craft
Enterprise · 2 — App patterns · ~6 min · Module 4: Enterprise Design Patterns
What is this?
Retry re-invokes a failed operation with backoff when failures are transient — timeouts, 429s, brief network blips.
Why should you care?
ShopNest payment provider blips should not fail checkout on the first timeout.
See it live — copy this example
Paste into a C# console or class library project and run dotnet run.
public static async Task<T> RetryAsync<T>(Func<Task<T>> action, int attempts = 3)
{
for (var i = 1; i <= attempts; i++)
{
try { return await action(); }
catch when (i < attempts)
{
await Task.Delay(TimeSpan.FromMilliseconds(100 * i));
}
}
return await action();
}
var result = await RetryAsync(async () =>
{
Console.WriteLine("call psp");
return "ok";
});
Console.WriteLine(result);
Run Example »
Edit the code below and click Run to see the result in Toolliyo’s live editor.
What happened?
- Backoff reduces stampedes.
- Only retry transient errors.
- Idempotency keys required for payments.
- Polly is the usual library (later lesson).
Practice next
- Run the helper.
- Throw on first call and succeed on second.
- Do not retry on validation errors.
- Cap attempts at 5.
- Log each attempt number.
Remember
Retry transient faults. Backoff + jitter. Idempotent operations.
ShopNest PSP retries
Capture retries twice with backoff + idempotency key.
Outcome: Blips recover; doubles do not charge twice.
Interview prep for this lesson
Practice these questions aloud after reading—each links to a full structured answer.
Sign in to ask a question or upvote helpful answers.
No questions yet — be the first to ask!