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());
}
}
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
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 utilisantExpression<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.