如何以编程方式取消队列触发的 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
.
希望对您有所帮助,如果您还有疑问,请告诉我。
我已经部署了一个连续的 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
.
希望对您有所帮助,如果您还有疑问,请告诉我。