在我详细阐述我的问题之前 - 我不是一个专业的程序员/编码员,但是最近涉及大量阅读文件,编写文件,将文件移动到文件夹等的项目一直在想如何最好地处理多个例外来源(所有这些都是文件/文件夹读/写)。
该项目有一个基本的重试'在某些基于文件的操作中,它会在一段时间内休眠一两秒,然后再重试X次 - 然后它会抛出一个消息框,基本上说明它无法完成。
有没有办法获取任何/所有文件/文件夹访问权限,创建单个“重试”'例行程序 - 让它在最终放弃并提醒某人之前重试它之前尝试做的事情(并且失败了) - 或者这是应该按文件操作进行的事情?
我想我的想法是,对于许多应用程序,如果操作失败 - 应用程序知道它之前正在做什么并且可以重试它 - 而不是写相同的“重试”'代码(根据尝试的操作修改代码) - 是否可以使用单个例程重试它?
我甚至不确定它是否可行,更不用说推荐了。
'重试'代码非常基础,类似于以下内容:
int retrycount = 3;
int retries = 0;
while (retries < retrycount)
{
try
{
File.Copy(SomeFile, SomeOtherFile);
}
catch (Exception e)
{
// Try Again
retries++;
}
if (File.Exists(SomeOtherFile) == true)
{
break;
}
}
稍后,&#39;重试&#39;用于确定它是否完全失败(重试== retrycount)并在发生这种情况时发出警报。
如果有人可以提供任何建议,或者即使只是告诉我我想到的是可能的 - 不推荐,也会有帮助。
答案 0 :(得分:4)
您可以通过传递Action
:
public void Retry(Action action, int retryCount)
{
int retries = 0;
while (retries < retryCount)
{
try
{
action();
return;
}
catch (Exception e)
{
// Try Again
retries++;
}
}
}
Retry(() => File.Copy(SomeFile, SomeOtherFile), 3);
编辑:当然之前已经询问过,请参阅How to implement re-try n times in case of exception in C#?。
答案 1 :(得分:1)
一种方法:
Queue
{File, LastAttempt, Attempts}
Attempts
LastAttempt
更新为DateTime.Now
,然后重新添加到队列末尾(除非Attempts
大于某个阈值,在这种情况下,您将文件添加到失败文件列表)