TaskCanceledException приводит к тому, что задание Hangfire находится в состоянии обработки на неопределенный срок.

Насколько я понимаю, Hangfire пока не поддерживает асинхронные методы. В качестве обходного пути я обернул вызовы асинхронного метода AsyncContext.Run() из AsyncEx, чтобы он выглядел синхронно с Взрывная точка зрения. Исключение кажется правильным, как и ожидалось (развернуто из AggregateException).

    public void Task()
    {
        AsyncContext.Run(() => TaskAsync());
    }

    private async Task TaskAsync()
    {
        //...
    }

Однако, когда TaskAsync выдает TaskCanceledException, Hangfire неправильно помечает это как "Failed". Вместо этого он попытается обработать задание еще раз. Если TaskAsync продолжит выдавать TaskCanceledException, он застрянет в этом состоянии на неопределенный срок вместо того, чтобы прекратить повторные попытки после 10 попыток, как обычно.

Похоже, это связано с тем, что Hangfire рассматривает OperationCanceledException как собственный поток управления, а не как исключение, возникающее в задании. например здесь и здесь.

Есть ли способ обойти это, кроме как обернуть все мои задания Hangfire с помощью catch TaskCanceledException ?


person Aditya Santoso    schedule 18.09.2015    source источник
comment
Мне нравится, как вы представляете свой вопрос. Небольшое исправление: Hangfire пока не поддерживает методы async: никто никогда не видит ключевое слово async, кроме вас и компилятора. Это всего лишь инструкция компилятору для выполнения определенных преобразований кода, но не часть сигнатуры метода. Возможно, правильнее было бы сказать, что Hangfire пока не поддерживает асинхронные (без форматирования кода!) методы, то есть возвращающие Task или Task<T>.   -  person stakx - no longer contributing    schedule 18.09.2015


Ответы (1)


Для тех, кто сталкивается с той же проблемой, что и я, эта ошибка была исправлена ​​в Hangfire 1.4.7.

В соответствии с набором изменений Hangfire теперь проверяет, что InnerException не является TaskCanceledException.

person Aditya Santoso    schedule 02.10.2015