Implémentation d'opérations asynchrones régulièrement planifiées dans des applications Web C#
Défi :
De nombreuses applications web C# nécessitent l'exécution périodique de tâches, comme l'envoi de données d'utilisation à un service distant, sans impacter la réactivité des requêtes des utilisateurs. Cela nécessite un mécanisme analogue à la fonction setInterval
de JavaScript, mais dans le contexte asynchrone de C#.
Approche :
Alors que la classe Timer
propose un mécanisme de timing, son gestionnaire d'événements Elapsed
nécessite une signature de méthode synchrone. Une solution plus robuste et flexible implique une boucle while
combinée avec Task.Delay()
:
<code class="language-csharp">public async Task ExecutePeriodicallyAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await MyAsyncMethod(); await Task.Delay(interval, cancellationToken); } }</code>
Ce code appelle de manière asynchrone MyAsyncMethod()
au interval
spécifié. Le CancellationToken
permet une terminaison gracieuse de la boucle.
Considérations importantes pour ASP.NET :
Dans le contexte d'ASP.NET, il est fortement déconseillé de simplement démarrer cette tâche et de l'oublier ("fire-and-forget"). Cela peut entraîner des fuites de mémoire et une instabilité des applications. Pour une gestion fiable des tâches en arrière-plan dans ASP.NET, envisagez ces alternatives :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!