首页 > 解决方案 > 如何以编程方式取消队列触发的 Azure WebJob

问题描述

我已经部署了一个连续的 Azure WebJob,其中包含一个从队列消息触发的过程。

public Task Automation([QueueTrigger("automqueue")] string message, TextWriter log, CancellationToken token)
{
     ....
}

该过程包含一个CancellationToken从系统用于正常关机的程序。

CancellationToken当用户想要取消进程时,是否有任何编程方式来触发它?

我的自动化需要分配资源才能完成,有时可能需要几个小时才能完成。这就是用户可能想要取消该进程并开始另一个进程的原因。

我可以使用CancellationToken我已经拥有的或者我需要实施自定义解决方案吗?

标签: azureazure-webjobscancellation-token

解决方案


CancelationToken仅用于关闭通知,它在所有 Process 实例之间共享,不能用于其他原因。

而且它仅供阅读,您无法手动更改它,因此也许您可以创建一个新CancellationTokenSource令牌并将令牌组合成一个令牌,如果任何令牌被取消,该令牌将被取消。

这是我的代码。

public static void ProcessQueueMessage(
            [QueueTrigger("queue2")] string message,
            ILogger logger, CancellationToken token
            )
        {

            CancellationTokenSource tokenSource = new CancellationTokenSource();
            string flag;
            CancellationTokenSource compositeTokenSource =
                  CancellationTokenSource.CreateLinkedTokenSource(
                  tokenSource.Token, token);

            if (message.Equals("shutdown"))
            {
                logger.LogInformation(message);
                tokenSource.Cancel();
                flag = compositeTokenSource.Token.IsCancellationRequested.ToString();
                logger.LogInformation(flag);
            }
            else {
                logger.LogInformation(message);
                flag = compositeTokenSource.Token.IsCancellationRequested.ToString();
                logger.LogInformation(flag);
            }
        }

如果消息等于“shutdown”,则该方法Cancel()将被执行。那么IsCancellationRequested复合令牌的属性将是true

希望这对您有所帮助,如果您仍有疑问,请告诉我。


推荐阅读