Как отменить запущенную очередь веб-работы Azure программно - PullRequest
0 голосов
/ 22 ноября 2018

Я развернул Continuous Azure WebJob, содержащий процедуру, которая запускается из сообщений очереди.

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

Процедура содержит CancellationToken, который используется из системы для постепенного отключения .

Есть ли какой-либо программный способ вызвать это CancellationToken, когда пользователь хочет отменить процесс?

Моей автоматизации требуется выделение ресурсов для завершения, а иногда это может занять несколько часов.быть завершен.Вот почему пользователь может захотеть отменить процесс и запустить другой.

Могу ли я использовать CancellationToken, который у меня уже есть, или мне нужно реализовать собственное решение?

1 Ответ

0 голосов
/ 23 ноября 2018

CancelationToken только для уведомления о завершении работы, оно используется всеми экземплярами процесса и не может использоваться по другим причинам.

И только для чтения, вы не можете изменить его вручную, так что, возможно, выможет создать новый 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.

Надеюсь, это поможет вам, если у вас все еще есть вопросы, пожалуйста, дайте мне знать.

...