Side effect
workflow.SideEffect is useful for short, nondeterministic code snippets, such as getting a random
value or generating a UUID. It executes the provided function once and records its result into the
workflow history. workflow.SideEffect does not re-execute upon replay, but instead returns the
recorded result. It can be seen as an "inline" activity. Something to note about workflow.SideEffect
is that, unlike the Cadence guarantee of at-most-once execution for activities, there is no such
guarantee with workflow.SideEffect. Under certain failure conditions, workflow.SideEffect can
end up executing a function more than once.
The only way to fail SideEffect is to panic, which causes a decision_task failure. After the
timeout, Cadence reschedules and then re-executes the decision_task, giving SideEffect another chance
to succeed. Do not return any data from SideEffect other than through its recorded return value.
The following sample demonstrates how to use SideEffect:
encodedRandom := SideEffect(func(ctx cadence.Context) interface{} {
return rand.Intn(100)
})
var random int
encodedRandom.Get(&random)
if random < 50 {
...
} else {
...
}