Comment invoquer des méthodes asynchrones dans Hangfire?

J’ai l’API asp.net core application et c’est la première fois que je vais utiliser HangFire.

Dans l’application .Net Core, toutes mes méthodes sont asynchrones. Basé sur SO Post, ce n’est pas une bonne idée d’utiliser wait() lors de l’appel de la méthode async dans Hangfire.
Toujours selon le problème de prise en charge de hangfire dans la v1.6.0, la prise en charge asynchrone a été ajoutée. J’utilise la version 1.6.12 mais je ne vois toujours pas le support async.

Comment puis-je appeler la méthode asynchrone de Enqueue . Actuellement, j’utilise 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 files) { _backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait()); } } 

Basé sur l’un des exemples du référentiel sur github

Il suffit de supprimer l’appel de blocage en Wait

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

La méthode sait maintenant comment gérer Func qui renvoie la tâche

Hangfire 1.6.0 – Blog

La logique de mise en queue est la même pour les méthodes sync et async. Dans les versions antérieures, il y avait un avertissement CS4014, mais vous pouvez maintenant supprimer toutes les instructions de désactivation de l’avertissement #pragma . Il a été implémenté en utilisant les surcharges de parameters Expression> .

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

Remarque:

Ce n’est pas une vraie asynchronie

Veuillez considérer cette fonctionnalité comme un sucre syntaxique. Le traitement en arrière-plan n’est pas devenu asynchrone. En interne, il a été implémenté à l’aide de la méthode Task.Wait, afin que les travailleurs n’effectuent aucun traitement en attendant l’achèvement d’une tâche. La véritable asynchronie peut n’intervenir que dans Hangfire 2.0 et nécessite de nombreuses modifications radicales des types existants.