当前位置: 首页 > 知识库问答 >
问题:

根据外部(例如用户)输入更改Uber Cadence睡眠时间

华化
2023-03-14

是否有Cadence工作流基于外部输入更改睡眠持续时间的示例?

我正在寻找的场景是这样的:工作流在时间X之前一直处于Hibernate状态,但在Hibernate开始之后但在它完成之前,有一个外部触发器导致时间X变为时间Y。Y可以晚于或早于X。它甚至可以早于“现在”,它应该立即释放Hibernate。

共有1个答案

邹锦
2023-03-14

这是您要查找的代码片段。

func SampleTimerWorkflow(ctx workflow.Context, timerDelay time.Duration) error 
{
    logger := workflow.GetLogger(ctx)
    resetCh := workflow.GetSignalChannel(ctx, "reset")

    timerFired := false
    delay := timerDelay
    for ;!timerFired; {
        selector := workflow.NewSelector(ctx)

        logger.Sugar().Infof("Setting up a timer to fire after: %v", delay)
        timerCancelCtx, cancelTimerHandler := workflow.WithCancel(ctx)
        timerFuture := workflow.NewTimer(timerCancelCtx, delay)
        selector.AddFuture(timerFuture, func(f workflow.Future) {
            logger.Info("Timer Fired.")
            timerFired = true
        })

        selector.AddReceive(resetCh, func(c workflow.Channel, more bool) {
            logger.Info("Reset signal received.")
            logger.Info("Cancel outstanding timer.")
            cancelTimerHandler()

            var t int
            c.Receive(ctx, &t)
            logger.Sugar().Infof("Reset delay: %v seconds", t)
            delay = time.Second * time.Duration(t)
        })

        logger.Info("Waiting for timer to fire.")
        selector.Select(ctx)
    }

    workflow.GetLogger(ctx).Info("Workflow completed.")
    return nil
}

现在,您可以发送信号将计时器重置为10秒,如下所示:

cadence-cli --domain <domain> wf signal -w <workflow_id>  --name reset --input 10
 类似资料:
  • 我希望你能帮助我。我有一个游戏,其中透明纹理加载,并应根据用户的选择(十六进制代码)在游戏开始时上色。 我的游戏将在游戏人物的位置(居中)放置平铺。瓷砖是50x50,我的png也是。它有一个透明的背景,我的图形的矢量有透明的东西,应该是彩色的。它看起来像这样: 我正在使用libGDX引擎,我真的很沮丧,因为这个问题。感谢您的帮助! 非常感谢!

  • 我想让程序根据我的扫描仪输入从ArrayList中进行选择。比如,我写早餐和甜食,它必须随机列出早餐甜食,并打印随机索引。 我还在学习Java,我只是在玩,并试图编码小项目来训练它。 下面是我已经写过的课程: 我是否可以将列表存储在变量中,可能是这样的: 我知道很难理解我,但英语不是我的主要语言,希望它能被理解。

  • 我正在调用while循环内的线程Hibernate1秒。当标志为true时,循环将运行(标志为true无限时间)。在循环内,线程应Hibernate1秒,唤醒并增加计数器,检查IF条件,如果为FALSE,则应再次Hibernate1秒并继续29次。在第30次迭代中,IF条件为true,IF语句中调用的方法将收集并存储数据。最后,在第32次迭代中,第二个IF语句将把存储的数据发送到服务器,并将计数设

  • 我在网上找遍了,似乎还是找不到这个问题的答案。我正在使用Visual C++(2010),我想知道如何创建一个对话框(MFC,基于对话框的程序),该对话框可以根据用户输入进行更改。例如,假设我在对话框上有两个单选按钮--一个用于圆形,一个用于矩形。如果用户单击矩形,我希望在同一个对话框上有一个静态文本,上面写着“长度”,然后是一个编辑控件,供用户放置长度。现在,如果用户单击circle,我希望在同

  • 问题内容: 我已经创建了Django网站,但是我喝了Koolaid,并且想要创建iPhone版本。经过深思熟虑后,我提出了两种选择: 制作其他网站,例如i.xxxx.com。使用Django的站点框架将其绑定到同一数据库中。 寻找一些中间件时间来读取用户代理,并动态更改模板目录。 但是,我真的更喜欢选项2。我有所保留,主要是因为Django文档不鼓励动态更改设置。我发现了一个片段,可以满足我的需求

  • 我很难弄清楚如何让我的程序根据用户输入的月、日、年来计算星期几。如下图所示。关于如何使它与JTextField和JComboBoxes连接,我没有任何线索。我真的很感谢任何人帮我做这件事。我知道我应该用: Calendar xmas=new GregorianCalendar(1998,Calendar.12,25);int dayOfWeek=xmas.get(calendar.day_of_w