我有这种扩展方法,如果有异常,允许我重试操作,典型的用途是尝试写入文件,但是由于某种原因,我无法这样做,所以稍后再重试...

扩展名如下:

public static void WithRetry<T>(this Action action, int timeToWait = 500, int timesToRetry = 3) where T : Exception
{
    int retryCount = 0;

    bool successful = false;

    do
    {
        try
        {
            action();
            successful = true;
        }
        catch (T)
        {
            retryCount++;
            Thread.Sleep(timeToWait);
            if (retryCount == timesToRetry) throw;
        }
        catch (Exception)
        {
            throw;
        }
    } while (retryCount < timesToRetry && !successful);
}


Visual Studio告诉我在第一个catch块中吞下一个异常,这不好吗?

谢谢。

最佳答案

该警告正是您要达到的目的。您正在吞下例外(timesToRetry-1)次。在最后一次尝试中,只有您实际上在抛出异常。在此之前,所有异常都将被吞没并丢失。由于这是您要实现的行为。禁止显示消息没有任何危害。

但是正如@HimBromBeere所说,删除catch(Exception)块。您也可以尝试在每次重试时记录异常,因为您将丢失此数据。如果每次都抛出不同种类的异常该怎么办。没有办法确定。

09-25 23:07