Library to assist implementing application retry logic
C#
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
Retryable
.gitignore
LICENSE.txt
README.md

README.md

Retry

Library to assist implementing application retry logic. RetryPolicy/ShouldRetry taken from Windows Azure SDK for .NET (https://github.com/WindowsAzure/azure-sdk-for-net).

More samples will be added to the source code.

Simple example with no retry:

RetryPolicy noRetryPolicy = () =>
{
    return (int retryCount, Exception exception, out TimeSpan retryInterval) =>
    {
        retryInterval = TimeSpan.Zero;
        return false;
    };
};

Action action = () => { /* some action to retry */ };
action.InvokeWithRetry(noRetryPolicy);

Simple example with 100ms delay between retries with up to 5 retries:

RetryPolicy simpleRetryPolicy = () =>
{
    return (int retryCount, Exception exception, out TimeSpan retryInterval) =>
    {
        retryInterval = TimeSpan.FromMilliseconds(100);
        return retryCount < 5;
    };
};

Action action = () => { /* some action to retry */ };
action.InvokeWithRetry(simpleRetryPolicy);

Func<int> func = () => { /* some action to retry */ return 0; };
int result = func.InvokeWithRetry(simpleRetryPolicy);

You can also provide an ManualResetEventSlim to cancel any wait and throw the last error:

SqlConnection connection = ...
// try to open a connection to the database 	
Action action = connection.Open;
ManualResetEventSlim cancel = new ManualResetEventSlim(false);
action.InvokeWithRetry(retryPolicy, cancel);

// on another thread, cancel any current executing wait
cancel.Set();