![]() |
1
21
你可以在一个循环中完成。
|
![]() |
2
12
您可以尝试另一种方法:
我认为它更好地记录了意图。它的代码也更少,更容易维护。 |
![]() |
3
11
到目前为止,所有的答案都假定对任何异常的反应都应该是重试该操作。这是一个很好的假设,直到它是一个错误的假设。您可以很容易地重试正在损坏系统的操作,所有这些都是因为您没有检查异常类型。
你应该差不多
从未
“光秃秃的”
|
![]() |
4
2
尝试一个具有某种限制的循环:
|
![]() |
5
1
您应该使用递归(或循环),并且只有在得到预期的错误时才应该重试。 例如:
编辑 有一个循环:
您可以尝试在
如果最后一次重试失败,这将引发最后一个异常。 |
![]() |
6
1
这里有一些我们正在使用的重试逻辑。我们做的不多,我将把它拉出并记录为我们的重试模式/标准。当我第一次写它的时候,我必须把它放在机翼上,所以我来这里是想看看我写的是否正确。看起来我是。下面的版本是完全注释的。有关未注释的版本,请参见下面的内容。
我喜欢SamuelNeff使用异常变量来查看它是否完全失败的例子。这会使我逻辑中的一些评估变得简单一些。我可以走任何一条路。不确定这两种方法都有明显的优势。不过,在这个时候,我不会改变我们的做法。重要的是要记录下你在做什么,为什么这样一些白痴就不会从你身后走过,把所有的事情都弄糟。 不过,为了更好地了解代码是否在某种程度上更短或更干净,我把所有的注释都删掉了。他们排出来的行数完全一样。我继续编译了这两个版本,并通过Reflector代码度量来运行它们,得到了以下结果:
catch内的最终异常逻辑(22行):
for循环之后的最终异常逻辑(22行):
|
![]() |
7
1
我正在为重试方案使用以下通用方法。我特别想引起大家的注意
|
![]() |
8
0
正如其他人所指出的,正确的方法是用某种类型的max_重试将您的try/catch包装在某个循环中。 您还可以考虑在每个循环迭代之间添加超时。否则,在暂时性问题有机会自行解决之前,您可能会烧毁重试计数器。 |
![]() |
9
0
似乎你有你需要的答案,但我想我会发布这个链接, What is an Action Policy? 我发现这提供了一个更优雅的解决方案。Lokad有一些相当复杂的实现,但是这个家伙的逻辑是非常可靠的,并且您最终编写的最终代码是非常简单的。 |
![]() |
10
0
更新:基于注释的固定代码。 |
|
M.Jane · 组织和编写异常类的正确方法 7 年前 |
![]() |
shubham daharwal · java中的内部捕获异常 7 年前 |
![]() |
Jon · 如何在不需要任何操作的情况下处理Python异常 7 年前 |
![]() |
felix1415 · C++捕获(标准::异常和e)与捕获(…) 7 年前 |
![]() |
k0pernikus · 如何在scala中键入可能引发异常的函数? 7 年前 |