1. 同样,先抛出问题:
我们常常会有担心一个功能比较复杂的SDK会出现bug,导致程序一直卡在这个点,影响程序继续进行,我们通常需要在这种操作单独添加一个定时器,当定时器超时时,认为这个Action已经异常,需要执行异常处理。
TFlow如何解决这种问题:
在添加Action时,可以设置一个action超时参数:
RunParameters setTimeout(long timeout)// 设置超时参数public void addAction(IAction action, IActionLink subscribe, RunParameters runParameters)// 添加任务
当出现超时时,会在Action里面产生onTimeout()的回调
private TFlow.IAction action1 = new TFlow.IAction(){
@Override
protected void onRun(final TFlow.IActionCB cb) {
new Thread(){
@Override
public void run() {
super.run();
System.out.println("action 1");
cb.finish("data from action 1");
}
}.start();
}@Override
protected void onTimeout() {}@Override
public void cancel() {
System.out.println("action1 cancel");
}@Override
public String toString() {
return "action1";
}
};
2. 同样,抛出第二个问题:
我们经常需要在执行完某个操作时,等待几秒钟,再执行下一个操作。比如等待5秒,自动执行页面跳转操作。
通常,我们也是设置一个定时器来处理这种事,但是最终代码都是比较恶心。
TFlow如何解决:
RunParameters setRunDelay(long runDelay)
在参数里面添加delay参数就行了。
RunParameters参数是可以动态更新,比如如下逻辑,如果登录失败,就延迟10秒再次登录。
tFlow.addAction(logonAction, o -> {
if(o){
return getStoreIDAction;
}else{
logonAction.setRunParameters(logonAction.getRunParameters().setRunDelay(10000));
// 延迟10秒执行
return logonAction;
}
});
【个人心得|TFlow的超时检测,delay操作】