我有这种扩展方法,如果有异常,允许我重试操作,典型的用途是尝试写入文件,但是由于某种原因,我无法这样做,所以稍后再重试...
扩展名如下:
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)
块。您也可以尝试在每次重试时记录异常,因为您将丢失此数据。如果每次都抛出不同种类的异常该怎么办。没有办法确定。