web-dev-qa-db-fra.com

Comment invoquer des méthodes asynchrones dans Hangfire?

J'ai une application API principale asp.net et c'est la première fois que j'utilise 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.
Également selon le problème de support de Hangfire dans la v1.6.0, le support asynchrone a été ajouté. J'utilise la version 1.6.12 mais je ne vois toujours pas le support asynchrone.

Comment appeler la méthode asynchrone depuis 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<string> files)
    {
        _backgroungJobClient.Enqueue(() => _downloader.DownloadAsync(files).Wait());
    }
}
15
LP13

Basé sur l'un des exemples sur le référentiel sur github

Supprimez simplement l'appel de blocage Wait

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

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

Hangfire 1.6.0 - Blog

La logique de mise en file d'attente est la même pour les méthodes de synchronisation et d'async. Au début de la version bêta, il y avait un avertissement CS4014, mais maintenant vous pouvez supprimer tous les #pragma avertissement désactiver les instructions. Il a été implémenté en utilisant Expression<Func<Task>> surcharge de paramètres.

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 employés n'effectuent aucun traitement en attendant la fin d'une tâche. La véritable asynchronie ne peut venir que de Hangfire 2.0, et elle nécessite beaucoup de changements de rupture aux types existants.

40
Nkosi