Exception handling &引用;把它放高一点。”;定义
在堆栈跟踪中,顶部的方法调用是最近调用的方法 当提到短语“handleit higher up”时,这是指在方法调用程序中还是在catch块中调用另一个方法 此外,在使用我编写的API的多层应用程序中,似乎最好的策略是始终记录异常并尽快处理它,然后重试,以便UI中的调用方法可以显示错误。是否有其他异常重新触发的使用场景 如果某个文件被锁定,默认情况下是否应该在catch块中执行重试操作或加载另一个文件等操作?异常处理是关于报告错误还是关于重试操作/使用不同参数重试 谢谢Exception handling &引用;把它放高一点。”;定义,exception-handling,Exception Handling,在堆栈跟踪中,顶部的方法调用是最近调用的方法 当提到短语“handleit higher up”时,这是指在方法调用程序中还是在catch块中调用另一个方法 此外,在使用我编写的API的多层应用程序中,似乎最好的策略是始终记录异常并尽快处理它,然后重试,以便UI中的调用方法可以显示错误。是否有其他异常重新触发的使用场景 如果某个文件被锁定,默认情况下是否应该在catch块中执行重试操作或加载另一个文件等操作?异常处理是关于报告错误还是关于重试操作/使用不同参数重试 谢谢 越高意味着堆栈越低,是的
示例和讨论 在您的锁定示例中,您可能应该阻止等待锁释放。如果锁没有释放,可能会抛出一个异常(或者等待一个很短但定义好的时间间隔)——在本例中,这将是一个异常,因为您编写了锁定文件的代码,并且已经编写了尽快释放锁的代码 这里有一个问题,您可能希望在处理完异常后再等待一段时间,我打赌您希望假装该异常从未发生过——即,从您离开的位置重新启动。但是异常机制不能将您带回原始阻塞发生的地方。您的解决方案是:
try{...}
catch{alternateStrategy()}
代码:2
try
{
IAmALabel:
checkFileLock(timeoutVal);
}
Catch
{
timeoutVal = timeoutVal*2;
goto IamALabel;
}
注意:以上可能是一个无限循环,如果您使用它,请对其设置一个上限
代码3:
int tries=3;
while(true)
{
int ret=CheckFileLock(timeoutVal);
if(ret==0) // 0 = success, anything else represents a distinct error.
break;
tries--;
if(tries==0)
throw exception();
}
示例和讨论 在您的锁定示例中,您可能应该阻止等待锁释放。如果锁没有释放,可能会抛出一个异常(或者等待一个很短但定义好的时间间隔)——在本例中,这将是一个异常,因为您编写了锁定文件的代码,并且已经编写了尽快释放锁的代码 这里有一个问题,您可能希望在处理完异常后再等待一段时间,我打赌您希望假装该异常从未发生过——即,从您离开的位置重新启动。但是异常机制不能将您带回原始阻塞发生的地方。您的解决方案是:
try{...}
catch{alternateStrategy()}
代码:2
try
{
IAmALabel:
checkFileLock(timeoutVal);
}
Catch
{
timeoutVal = timeoutVal*2;
goto IamALabel;
}
注意:以上可能是一个无限循环,如果您使用它,请对其设置一个上限