Click here to Skip to main content
15,881,882 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.5K   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 
Great
SuggestionSend repeat to action Pin
Anton Minko9-Sep-13 4:06
professionalAnton Minko9-Sep-13 4:06 
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.