RetryPolicies.RetryExponential Method (Int32, TimeSpan, TimeSpan, TimeSpan)

Storage Client Library NET API

[This topic is part of the Microsoft Azure Storage Client Library 1.7, which has been deprecated. See Storage Client Library for the latest version.]

Returns a policy that retries a specified number of times with a randomized exponential backoff scheme, using specified minimum and maximum backoff values.

Namespace: Microsoft.WindowsAzure.StorageClient
Assembly: Microsoft.WindowsAzure.StorageClient (in Microsoft.WindowsAzure.StorageClient.dll)

Usage

Visual Basic
Dim retryCount As Integer
Dim minBackoff As TimeSpan
Dim maxBackoff As TimeSpan
Dim deltaBackoff As TimeSpan
Dim returnValue As RetryPolicy

returnValue = RetryPolicies.RetryExponential(retryCount, minBackoff, maxBackoff, deltaBackoff)

Syntax

Visual Basic
Public Shared Function RetryExponential ( _
	retryCount As Integer, _
	minBackoff As TimeSpan, _
	maxBackoff As TimeSpan, _
	deltaBackoff As TimeSpan _
) As RetryPolicy
C#
public static RetryPolicy RetryExponential (
	int retryCount,
	TimeSpan minBackoff,
	TimeSpan maxBackoff,
	TimeSpan deltaBackoff
)
C++
public:
static RetryPolicy^ RetryExponential (
	int retryCount, 
	TimeSpan minBackoff, 
	TimeSpan maxBackoff, 
	TimeSpan deltaBackoff
)
J#
JScript

Parameters

retryCount

Type: System.Int32

A non-negative number indicating the number of times to retry.

minBackoff

Type: System.TimeSpan

The minimum backoff interval.

maxBackoff

Type: System.TimeSpan

The maximum backoff interval.

deltaBackoff

Type: System.TimeSpan

The delta backoff value used by the exponential backoff retry policy.

Return Value

Type: Microsoft.WindowsAzure.StorageClient.RetryPolicy

The retry policy.

Remarks

The retry policy returned by RetryExponential performs an exponential backoff determined by the values of minBackoff, maxBackoff, and deltaBackoff.

The RetryExponential method returns a delegate that uses the algorithm shown here:

 Copy Code
public static RetryPolicy RetryExponential(int retryCount, TimeSpan minBackoff, TimeSpan maxBackoff, TimeSpan deltaBackoff)
{
    return () =>
    {
        return (int currentRetryCount, Exception lastException, out TimeSpan retryInterval) =>
        {
            if (currentRetryCount < retryCount)
            {
                Random rand = new Random();
                int increment = (int)((Math.Pow(2, currentRetryCount) - 1) * rand.Next((int)(deltaBackoff.TotalMilliseconds * 0.8), (int)(deltaBackoff.TotalMilliseconds * 1.2)));
                int timeToSleepMsec = (int)Math.Min(minBackoff.TotalMilliseconds + increment, maxBackoff.TotalMilliseconds);

                retryInterval = TimeSpan.FromMilliseconds(timeToSleepMsec);

                return true;
            }

            retryInterval = TimeSpan.Zero;
            return false;
        };
    };
}

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Platforms

Development Platforms

Windows Vista, Windows 7, Windows Server 2008, Windows 8.1, Windows Server 2012 R2, Windows 8 and Windows Server 2012

Change History

See Also