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.