Corda 为什么我的流在抛出异常后重新运行?

Corda 为什么我的流在抛出异常后重新运行?,corda,Corda,我有一个流(没有响应程序),它执行一些验证并在成功时调用子流。 在验证期间,我查询vault中的状态,应该只返回1个状态。 如果我得到超过1个状态,我抛出一个不支持的操作异常 当我查看日志时,此异常已被多次抛出,并且有多个StackTrace指示流已运行多次。 但是,如果我记录一个错误而不是抛出一个异常,那么流只运行一次 为什么抛出异常会导致流多次运行?根据您在这里描述的内容,很难知道为什么会发生这种情况,但请确保您没有调用FinalityFlow之类的子流,然后再尝试执行其他操作

我有一个流(没有响应程序),它执行一些验证并在成功时调用子流。
在验证期间,我查询vault中的状态,应该只返回1个状态。
如果我得到超过1个状态,我抛出一个不支持的操作异常

当我查看日志时,此异常已被多次抛出,并且有多个StackTrace指示流已运行多次。
但是,如果我记录一个错误而不是抛出一个异常,那么流只运行一次


为什么抛出异常会导致流多次运行?

根据您在这里描述的内容,很难知道为什么会发生这种情况,但请确保您没有调用FinalityFlow之类的子流,然后再尝试执行其他操作

        progressTracker.setCurrentStep(SIGNING);
        SignedTransaction signedTransaction = getServiceHub().signInitialTransaction(transactionBuilder);
        progressTracker.setCurrentStep(FINALISING);
        SignedTransaction fullySignedTransaction = subFlow(new CollectSignaturesFlow(signedTransaction, singletonList(session)));
        return subFlow(new FinalityFlow(fullySignedTransaction, singletonList(session)));
    }
资料来源:

大多数流所做的最后一件事是返回一个子流,如果您尝试在该子流之后执行其他操作,则可以执行该操作,但它通常会导致人们不期望的结果

还要确保添加@suspendable(以防万一你没有),这可能会导致一些中断,因为corda会运行你的流很多次