Using Asynchronous Methods with Retries
Retired Content |
---|
This content and the technology described is outdated and is no longer being maintained. For more information, see Transient Fault Handling. |
On this page: |
---|
Usage Notes |
You can use the Transient Fault Handling Application Block to invoke asynchronous methods that require a retry policy.
The following code example shows how to invoke the pair of asynchronous methods BeginDeleteIfExists and EndDeleteIfExists. The EndDeleteIfExists method returns a Boolean value to indicate whether the blob was deleted.
// Define your retry strategy: retry 5 times, starting 1 second apart
// and adding 2 seconds to the interval each retry.
var retryStrategy = new Incremental(5, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
// Define your retry policy using the retry strategy and the Azure storage
// transient fault detection strategy.
var retryPolicy = new RetryPolicy<StorageTransientErrorDetectionStrategy>(retryStrategy);
// Receive notifications about retries.
retryPolicy.Retrying += (sender, args) =>
{
// Log details of the retry.
var msg = String.Format("Retry - Count:{0}, Delay:{1}, Exception:{2}",
args.CurrentRetryCount, args.Delay, args.LastException);
Trace.WriteLine(msg, "Information");
};
// Do some work that may result in a transient fault.
retryPolicy.ExecuteAction(
ac =>
{
// Invoke the begin method of the asynchronous call.
this.DataBlob.BeginDeleteIfExists(ac, null);
},
ar =>
{
// Invoke the end method of the asynchronous call.
return this.DataBlob.EndDeleteIfExists(ar);
},
v =>
{
// Action to perform if the asynchronous operation
// succeeded.
if (v)
{
Trace.WriteLine("Blob deleted successfully", "Information");
}
else
{
Trace.WriteLine("The Blob was not deleted", "Information");
}
},
e =>
{
// Action to perform if the asynchronous operation
// failed after all the retries.
var msg = String.Format("Delete blob failed: {0}", e.ToString());
Trace.WriteLine(msg, "Error");
});
Usage Notes
- There are two overloaded versions of the ExecuteAction method that you can use to invoke asynchronous methods. One invokes methods that do not have a return value and one invokes methods that do have a return value. If the asynchronous method returns a value, it is passed to the success handler.
- You could use the value that is passed to the success handler to begin another asynchronous operation. For example, if deleting the blob succeeded, begin a copy from blob operation.
- The success handler is called when the asynchronous operation succeeds. The failure handler is called if the asynchronous operation cannot be completed despite the retry attempts.
Next Topic | Previous Topic | Home
Last built: June 7, 2012