Skip to content

A comprehensive, opinionated, and function-first resiliency library for C# and the broader .NET ecosystem.

License

Notifications You must be signed in to change notification settings

psibr/Resiliency

Repository files navigation

Resiliency for .NET

A comprehensive, opinionated, and function-first resiliency library for C# and the broader .NET ecosystem.

The basics

Resiliency adds a layer of handlers to an existing method call.

We can demonstrate the problem, and the solutions that Resiliency can provide pretty simply.

The PING scenario

In this scenario we have a theoretical API that provides us a Task PingAsync(CancellationToken c) method to test that it is up, when it goes down, the call will fail with a HttpNotFoundException. The caveat being: we know this API goes down for little spurts of time, or network requests fail, as they commonly can in the cloud.

This example shows a simple first pass at handling a Ping result.

class Program
{
    public static async Task Main(string[] args)
    {
        do
        {
            try
            {
                await PingAsync(CancellationToken.None);
            }
            catch(HttpNotFoundException)
            {
                await Task.Delay(TimeSpan.FromSeconds(5));
            }
        } while(true);
        
        // We can safely know the API appeared to be up by this point.
    }
}

A more comprehensive example in Resiliency may look like this.

class Program
{
    public static async Task Main(string[] args)
    {
        await ResilientOperation.From(PingAsync)
            .WhenExceptionIs<HttpNotFoundException>(async (op, ex) =>
            {
                await op.RetryAfterAsync(TimeSpan.FromSeconds(5));
            })
            .InvokeAsync();
            
        // We can safely know the API appeared to be up by this point.
    }
}

I would argue even in the simplest example, Resiliency's approach is more intuitive to the reader, and once you get past the initial learning curve, easier to write. This benefit drastically increases as more handling and advanced cases get added.

About

A comprehensive, opinionated, and function-first resiliency library for C# and the broader .NET ecosystem.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages