我想workflow.Sleep在我的一個 Cadence 活動中呼叫,以便能夠正確測驗它(并模擬來自Sleep函式的錯誤結果)。
在實施之前我注意到了兩件重要的事情:
context.Context并且workflow.Context是單獨的型別。- 每個活動的第一個引數 -
context.Context-是可選的,可以省略
我的嘗試:
1.第一次嘗試
import "go.uber.org/cadence/workflow"
// Activity:
func (s *MyActivities) WorkflowSleep(_ context.Context, workflowCtx workflow.Context, duration time.Duration) error {
return workflow.Sleep(workflowCtx, duration)
}
// In workflow; ctx has type workflow.Context:
err := workflow.ExecuteActivity(ctx, myActivities.WorkflowSleep, ctx, duration).Get(ctx, nil)
錯誤:
“錯誤”:“無法解碼帶有錯誤的活動函式輸入位元組:無法解碼引數:0,*internal.Context,帶有json錯誤:json:無法將物件解組為內部型別的Go值。函式的背景關系
2. 第二次嘗試
import "go.uber.org/cadence/workflow"
// Activity:
func (s *MyActivities) WorkflowSleep(workflowCtx workflow.Context, duration time.Duration) error {
return workflow.Sleep(workflowCtx, duration)
}
// In workflow; ctx has type workflow.Context:
err := workflow.ExecuteActivity(ctx, myActivities.WorkflowSleep, duration).Get(ctx, nil)
錯誤:
"PanicError":"reflect: 呼叫輸入引數太少"
題
是否可以workflow.Sleep在任何活動中使用?
uj5u.com熱心網友回復:
是否可以在任何活動中使用作業流。睡眠?
不,不允許workflow.Sleep在活動代碼中使用。
Workflow.Sleep僅在作業流代碼中允許。更一般地說,workflow包中的所有 API 只允許在作業流代碼中使用。
作業流代碼將在決策任務中執行,作業流執行緒/協程(特殊型別的 goroutines)由 Cadence 管理。這就是workflow包中這些 API 的作業方式。如果沒有決策任務 和作業流執行緒/協程,這些 API 將無法正常作業。
另一方面,活動代碼只是純粹的普通代碼,您應該使用常規的本機庫或依賴項來實作邏輯。例如,您可以time.Sleep在活動代碼中使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439704.html
上一篇:有效地計算整數除法的下限
