Click here to Skip to main content
15,886,518 members
Articles / Desktop Programming / WPF
Tip/Trick

TryRepeat

Rate me:
Please Sign up or sign in to vote.
4.86/5 (11 votes)
9 Sep 2013CPOL 14.6K   9   5
A small tip to retry an action, with an easy to use extension.

Introduction 

This is just a short description of my thoughts of handling exceptions and at the same time offering a retry.

Try Repeat 

I created an extension method just to make it convenient to use. The method extends an Action so that you just have to call (Action).TryRepeat(method) with a method that returns a Boolean to indicate if the action should retry or not. 

C#
/// <summary>
/// Tries the specified action.
/// </summary>
/// <param name="action">The action.</param>
/// <param name="failAction">The fail action.</param>
/// <returns></returns>
public static void TryRepeat(this Action action, Func<Exception, bool> failAction)
{
  bool repeat;
  do
  {
    try
    {
      action();
      return;
    }
    catch (Exception e)
    {
      if (Debugger.IsAttached) Debugger.Break();
      repeat = failAction(e);
    }
  } while (repeat);
}

To use the extension method you can do this:

C#
Action a = () => 
{
   // Put your code here
};
a.TryRepeat(evaluationFunction);

The evaluation function takes the Exception as input and returns a Boolean value to indicate if the action should be repeated. It could look like this:

C#
public static bool HandleException(Exception e)
{
  if (e is SomeException)
  {
    MessageBoxResult result = 
      MessageBox.Show("Connection seems lost, reconnect?", "Error",
                      MessageBoxButton.YesNo);
    return result == MessageBoxResult.Yes;
  }
  return false;
}

Points of Interest 

I'm not thrilled about my idea, mainly because retrying actions might provoke unforeseen errors.

History 

  • 1.0: My initial thoughts.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Architect
Denmark Denmark
Name: Niel Morgan Thomas
Born: 1970 in Denmark
Education:
Dataengineer from Odense Technical University.
More than 20 years in IT-business.
Current employment:
Cloud architect at University College Lillebaelt

Comments and Discussions

 
GeneralMy vote of 5 Pin
Mario Z4-Oct-15 23:18
professionalMario Z4-Oct-15 23:18 
GeneralMy vote of 5 Pin
_Nizar9-Sep-13 20:18
_Nizar9-Sep-13 20:18 
SuggestionSend repeat to action Pin
Anton Minko9-Sep-13 4:06
professionalAnton Minko9-Sep-13 4:06 
Great stuff, I used similar approach in production code and may suggest that it makes sense to provide the bool repeat flag to action to see if it is first or repeated attempt to execute action. Having that, you'll be able to execute custom code before repeating main action (like clearing cache or adding debug message).
QuestionAn interesting idea, and I'd like to see where you could take this Pin
Pete O'Hanlon9-Sep-13 2:52
mvePete O'Hanlon9-Sep-13 2:52 
AnswerRe: An interesting idea, and I'd like to see where you could take this Pin
_Nizar9-Sep-13 20:18
_Nizar9-Sep-13 20:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.