何时将 @Suspendable 添加到流程中的方法?
When to add @Suspendable to methods in a flow?
将方法注释为 @Suspendable
的最佳做法是什么?在 Flow 中,可能有多个查询 vault/compute 业务逻辑的私有方法。这些是否应该用 @Suspendable
注释,以便它可以在节点中途崩溃时恢复?
或者 @Suspendable
仅适用于涉及 send
/ sendAndReceived
的方法,它等待交易对手的响应?
The run methods in Fiber, SuspendableRunnable, and SuspendableCallable
declare that they may throw a SuspendExecution exception.
@Suspendable is our way to specify a suspendable method is by declaring throws SuspendExecution.This is convenient because SuspendExecution is a checked exception, so if f calls g and g is suspendable, the Java compiler will force us to declare that f is suspendable (and it must be because it calls g and g might be suspended).
Sometimes, however, we cannot declare f to throw SuspendExecution. One example is that f is an implementation of an interface method, and we cannot (or don’t want to) change the interface so that it throws SuspendExecution.
So, suppose method f is declared in interface I, and we’d like to make its implementation in class C suspendable. The compiler will not let us declare that we throw SuspendExecution because that will conflict with f’s declaration in I.
What we do, then, is annotate C.f with the @Suspendable annotation (in the co.paralleluniverse.fibers package). Assuming C.f calls park or some other suspendable method g – which does declare throws SuspendExecution, we need to surround f’s body with try {} catch(SuspendExecution) just so the method will compile.
if we want to run h in a fiber, then it must be suspendable because it calls f which is suspendable. We could designate h as suspendable either by annotating it with @Suspendable or by declaring SuspendExecution
如果我们想在纤程中使用任何方法 运行,那么它必须是可挂起的。
所以基本上,任何调用可以抛出 SuspendExecution 或用 @Suspendable
.
注释的方法的方法
在我的例子中,我遇到了从函数调用 SubFlow
的错误,因为我没有用 @Suspendable
注释它,所以我遇到了 Quasar 异常。由于 SubFlow
是用 @Suspendable
注释的,所以注释我的函数有助于消除这些错误。
错误:Uninstrumented whole methods ('**') or single calls ('!!') detected:
将方法注释为 @Suspendable
的最佳做法是什么?在 Flow 中,可能有多个查询 vault/compute 业务逻辑的私有方法。这些是否应该用 @Suspendable
注释,以便它可以在节点中途崩溃时恢复?
或者 @Suspendable
仅适用于涉及 send
/ sendAndReceived
的方法,它等待交易对手的响应?
The run methods in Fiber, SuspendableRunnable, and SuspendableCallable declare that they may throw a SuspendExecution exception.
@Suspendable is our way to specify a suspendable method is by declaring throws SuspendExecution.This is convenient because SuspendExecution is a checked exception, so if f calls g and g is suspendable, the Java compiler will force us to declare that f is suspendable (and it must be because it calls g and g might be suspended).
Sometimes, however, we cannot declare f to throw SuspendExecution. One example is that f is an implementation of an interface method, and we cannot (or don’t want to) change the interface so that it throws SuspendExecution.
So, suppose method f is declared in interface I, and we’d like to make its implementation in class C suspendable. The compiler will not let us declare that we throw SuspendExecution because that will conflict with f’s declaration in I.
What we do, then, is annotate C.f with the @Suspendable annotation (in the co.paralleluniverse.fibers package). Assuming C.f calls park or some other suspendable method g – which does declare throws SuspendExecution, we need to surround f’s body with try {} catch(SuspendExecution) just so the method will compile.
if we want to run h in a fiber, then it must be suspendable because it calls f which is suspendable. We could designate h as suspendable either by annotating it with @Suspendable or by declaring SuspendExecution
如果我们想在纤程中使用任何方法 运行,那么它必须是可挂起的。
所以基本上,任何调用可以抛出 SuspendExecution 或用 @Suspendable
.
在我的例子中,我遇到了从函数调用 SubFlow
的错误,因为我没有用 @Suspendable
注释它,所以我遇到了 Quasar 异常。由于 SubFlow
是用 @Suspendable
注释的,所以注释我的函数有助于消除这些错误。
错误:Uninstrumented whole methods ('**') or single calls ('!!') detected: