azure - 如何以编程方式取消队列触发的 Azure WebJob
问题描述
我已经部署了一个连续的 Azure WebJob,其中包含一个从队列消息触发的过程。
public Task Automation([QueueTrigger("automqueue")] string message, TextWriter log, CancellationToken token)
{
....
}
该过程包含一个CancellationToken
从系统用于正常关机的程序。
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
。
希望这对您有所帮助,如果您仍有疑问,请告诉我。
推荐阅读
- google-apps-script - 使用 Apps 脚本向 Google 表单添加选项时保留图像
- json - 使用反序列化数据访问字典中的数据
- amazon-dynamodb - 如何在 DynamoDB 和 Cognito 之间关联用户数据
- python - porter-stemmer:python 中的词干提取不起作用
- r - ifelse() 命令出现问题,其中 2 个不同数据帧中看起来相同的 2 列未标识为相同
- python - 可以在 pip.ini 文件中提示输入用户名和密码而不是硬编码吗?
- flutter - 如何用 Dart 中的模型解析这个 json?
- paypal - 如何向用户引用贝宝 webhook?
- python-3.x - Telegram API Bot 邀请其他频道的订阅者加入我自己的频道
- css - Next.js 项目中的 CSS 过渡问题