Подтвердить что ты не робот

Как вызвать асинхронные методы в Hangfire?

У меня есть основное API-приложение asp.net, и я впервые использую HangFire.

В приложении .Net Core все мои методы асинхронны. Исходя из SO Post, не стоит использовать wait() при вызове асинхронного метода в hangfire.
Также в соответствии с проблемой поддержки hangfire в v1.6.0, была добавлена асинхронная поддержка. Я использую версию 1.6.12, но все же я не вижу поддержки асинхронного.

Как мне вызвать асинхронный метод из Enqueue. В настоящее время я использую wait()

public class MyController : Controller
{
    private readonly Downloader _downlaoder;
    private readonly IBackgroundJobClient _backgroungJobClient;
    public MyController(Downloader downloader, IBackgroundJobClient backgroungJobClient)
    {
        _downlaoder = downloader;
        _backgroungJobClient = backgroungJobClient;
    }

    [HttpPost]
    public void Post([FromBody]IEnumerable<string> files)
    {
        _backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait());
    }
}
4b9b3361

Ответ 1

На основе одного из примеров на репозитории на github

Просто удалите Wait блокировки вызова

_backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files));

Теперь метод знает, как обрабатывать Func, который возвращает Task

Hangfire 1.6.0 - Блог

Логика постановки в очередь одинакова для методов синхронизации и асинхронности. В ранних бета-версиях было предупреждение CS4014, но теперь вы можете удалить все операторы отключения предупреждения #pragma. Это было реализовано с использованием перегрузок параметров Expression<Func<Task>>.

BackgroundJob.Enqueue(() => HighlightAsync(snippet.Id));

Замечания:

Это не настоящая асинхронность

Пожалуйста, рассмотрите эту функцию как синтаксический сахар. Фоновая обработка не стала асинхронной. Внутренне это было реализовано с использованием метода Task.Wait, поэтому работники не выполняют никакой обработки, ожидая завершения задачи. Настоящая асинхронность может появиться только в Hangfire 2.0, и она требует много серьезных изменений в существующих типах.