Task.WhenAny и отмена задания HangfireC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Task.WhenAny и отмена задания Hangfire

Сообщение Anonymous »

В функции CheckForCancellationAsync я только проверяю, отменено ли задание или нет. Если оно отменено, я выдаю ошибку с помощью ThrowIfCancellationRequested() и останавливаю процесс.
Для этого я проверяю рабочий метод задания и метод управления отменой с помощью Task.WhenAny.
В Task.WhenAny функция CheckForCancellationAsync завершает процесс Task.WhenAny после отмены задания. Однако метод задания продолжает работать.
Почему Task.WhenAny не завершает все процессы?
Я не хочу добавлять проверки типа ThrowIfCancellationRequested() между кодами в методе Джоба. Как я могу завершить процессы с помощью центрального элемента управления, такого как Task.WhenAny?
using Hangfire;
using System;
using System.Threading;
using System.Threading.Tasks;

public class JobRunner
{
public static async Task RunAsync(Func job, IJobCancellationToken jobCancellationToken)
{
using (var cts = new CancellationTokenSource())
{
var cancellationToken = cts.Token;
var cancellationTask = jobCancellationToken.CheckForCancellationAsync(cancellationToken);

try
{
var jobTask = job(cancellationToken);
var completedTask = await Task.WhenAny(jobTask, cancellationTask);

if (completedTask == cancellationTask)
{
// If the cancellation task completed first, cancel the job task
cts.Cancel();
jobCancellationToken.ThrowIfCancellationRequested();
cancellationToken.ThrowIfCancellationRequested();
}

await jobTask; // Ensure the job completes if it wasn't cancelled
}
catch (OperationCanceledException)
{
Console.WriteLine("Job was cancelled.");
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ngfire-job
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Task.WhenAny и отмена задания Hangfire
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Почему вызов неоднозначен между Task.Run(Func) и Task.Run(Func) при передаче имени метода
    Anonymous » » в форуме C#
    0 Ответы
    100 Просмотры
    Последнее сообщение Anonymous
  • Тайм-аут веб-запроса или нет Task.WhenAny работает
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Тайм-аут веб-запроса или нет Task.WhenAny работает
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Тайм-аут веб-запроса или нет Task.WhenAny работает
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»