Click here to Skip to main content
Click here to Skip to main content
Go to top

TryRepeat

, 9 Sep 2013
Rate this:
Please Sign up or sign in to vote.
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. 

/// <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:

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:

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)

Share

About the Author

Niel M.Thomas
Software Developer (Senior)
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:
Working with application development in a major Danish company that produce medical equipment.

Comments and Discussions

 
GeneralMy vote of 5 Pinmember_Nizar9-Sep-13 20:18 
SuggestionSend repeat to action PinprofessionalAnton Minko9-Sep-13 4:06 
QuestionAn interesting idea, and I'd like to see where you could take this PinprotectorPete O'Hanlon9-Sep-13 2:52 
AnswerRe: An interesting idea, and I'd like to see where you could take this Pinmember_Nizar9-Sep-13 20:18 

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

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

| Advertise | Privacy | Mobile
Web01 | 2.8.140916.1 | Last Updated 9 Sep 2013
Article Copyright 2013 by Niel M.Thomas
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid