如何以编程方式取消队列触发的 Azure WebJob

How to cancel a queue triggered Azure WebJob programatically

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

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

该过程包含一个 CancellationToken,从系统中用于 graceful shutdown

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

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

我可以使用我已有的 CancellationToken 还是我需要实施自定义解决方案?

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.

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