如何从 `workflow.Context` 得到 `context.Context`?

How to get `context.Context` from `workflow.Context`?

我正在实现一个 Cadence Workflow,它需要使用 context.Context 参数调用函数。如何从 workflow.Context 中获取 context.Context?只是ctx.(*context.Context)的问题吗?

不是context.Context

您应该永远不要 编写任何使用 context.Context 的工作流代码。所有需要 context.Context 的调用都应在工作流 activity 或本地 activity 中编写以确定性。

换句话说,工作流代码应该只包含 orchestrate/manage 其他工作流实体的逻辑,例如 activities/childWF/Signal/etc。

workflow.Context是worker在工作流执行过程中传入工作流运行-时间信息的特殊数据结构。例如,workflowID 和 运行ID。它恰好调用 Context 只是因为这个 看起来 与 Golang 风格非常相似。除此之外,它与 context.Context.

没有任何直接关系

在Java客户端中,没有workflow.Context,worker传递这些数据的方式是通过ThreadLocal

如果你真的想将一些 KV 数据从外部传递给工作流代码,你可以使用上下文传播:https://github.com/uber-common/cadence-samples/tree/master/cmd/samples/recipes/ctxpropagation