我正在调用一个方法,该方法涉及大量获取和更新表的操作,可能需要 10 多分钟的时间。这是使用后台线程完成的,以便 UI 具有响应能力,并且用户不必等待它完成。
有可能会引发异常。在这种情况下,我需要将列的状态从“待处理”更新为“失败”。
在 catch block 中执行此操作可以吗?我可以在catch
block 中编写代码,以便执行查询以将状态更新为失败吗?这是正确的方法还是还有其他方法可以做到这一点?
编辑:我可以做这样的事情,以便在引发异常时,状态更新为“失败”并打印异常堆栈跟踪吗?
catch (Exception e) {
updateStatusByReqId(reqKey, "F");
e.printStackTrace();
}
这是否可以确保如果出现任何异常,请求的状态会更改为“失败”?请注意,在线创建请求时,请求的状态将是“待处理”。如果一切正常,它应该保持待定状态,否则更改为“失败”
最佳答案
如果您编写代码来更新 catch block 中的状态,它将正常工作,但是由于您位于方法内部,因此最好从方法返回 boolean 值并从线程的调用者更新 ui,像这样的东西:
private boolean updateDatabase() {
try {
//Your long updating code ...
} catch {
return false;
}
return true;
}
然后您可以从后台线程调用该方法,如果返回 false,则在 UI 中记录状态:
if(!updateDatabase()) {
//Update UI status
}
从我的角度来看,这样做是一种更好的风格......
关于java - 从后台线程的 catch block 更新表状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9766004/