Asp.net with Muhanad YOUNIS

January 2012 - Posts

Call a Function With Retry Using Generics

What if you like to call a web service and retry the call again until response? let me show you a nice way to call a function with retry until you retrieve what ever is needed from the function. This could be achieved by using generics especially by extending the Func<T> delegate; check the code below;

   1: public static class MyExtensions
   2:     {
   3:         public static T WithRetry<T>(this Func<T> action)
   4:         {
   5:             var result = default(T);
   6:             int retryCount = 0;
   7:             var succesful = false;
   8:             do
   9:             {
  10:                 try
  11:                 {
  12:                     result = action();
  13:                     succesful = true;
  14:                 }
  15:                 catch (Exception ex)
  16:                 {
  17:                     retryCount++;
  18:                 }
  19:             } while (retryCount < 3 && !succesful);
  20:             return result;
  21:         }
  22:     }

In the code you can see that we extended the Func that will return an object with type T. This function will keep trying for 3 times but you might change it to keep it trying until it achieve the goal. and here is how to use it


   1: MyService ser = new MyService();
   2: Func<MyService.contentSetList> fCon = () => ser.get(testlist.ToArray<string>());
   3: var con = fCon.WithRetry();
   4: return con;


hope this helps.

References: the original code belongs to Scott Allen at his course C# Fundamentals - Part 2 @ http://www.pluralsight-training.net. thanks Scott.
More Posts