尝试,抓住问题

Jam*_*ery 12 c# design-patterns

我注意到这个问题在我做的大多数事情中发生了很多,所以我认为必须有一个设计模式.

基本上,如果抛出异常,尝试解决问题并重试.如果我把它放在try中,它所做的就是捕获异常,但我想重试它正在做的事情,如果再次失败,再次重试一定次数.

这种东西有共同的模式吗?

Jee*_*raj 17

检查这个答案..希望能帮助你

编写重试逻辑最干净的方法?

public static class RetryUtility
{
   public static void RetryAction(Action action, int numRetries, int retryTimeout)
   {
       if(action == null)
           throw new ArgumenNullException("action"); 

       do
       {
          try 
          {  
              action(); 
              return;  
          }
          catch
          { 
              if(numRetries <= 0) 
                  throw;  // Avoid silent failure
              else
              {
                  Thread.Sleep(retryTimeout);
                  numRetries--;
              }
          }
       } 
       while(numRetries > 0);
   }
}
Run Code Online (Sandbox Code Playgroud)

呼叫

RetryUtility.RetryAction( () => SomeFunctionThatCanFail(), 3, 1000 );
Run Code Online (Sandbox Code Playgroud)

归功于LBushkin

  • +1:这个得到我的upvote.这是代表们的生活方式. (3认同)

Jam*_*ass 6

这运行不确定但是很容易为while子句添加循环计数器

    var solved = false;
    var tries = 0;

    while (!solved)
    {
         try
         {
            //Do Something
            solved = true;
         }
         catch
         {
             //Fix error
         } 
         finally
         {
              if(solved || IsRediculous(tries))
                 break;

              tries++;
         }
    }
Run Code Online (Sandbox Code Playgroud)