Comment puis-je planifier l'exécution automatique d'un controller dans mon application Web MVC?

J'ai une database qui suit en permanence la température. J'ai également un controller (controller A) qui calcule la température moyenne dans les 60 minutes (cela peut être changé par l'user dans la partie frontale). Si le calcul du controller A dépasse la température maximale définie, il appelle un autre controller qui avertit l'user par courrier électronique (controller B).

Pseudo code: while(Controller A) <-- runs in the background { if(max temperature is reached) Call Controller B } 

Ma question est, comment puis-je continuellement faire fonctionner le controller A sans trop ralentir les choses? J'ai lu que SignalR peut faire de l'automation, mais je ne sais pas vraiment quels mots-keys je devrais searchr.

Si quelqu'un pouvait me diriger dans la bonne direction, ce serait génial.

Vous ne devez pas exécuter un process si long sur un thread ASP.NET. Vous avez 2 options

1) Créez un service Windows qui vérifie votre table db toutes les n minutes et fait les choses nécessaires (comme envoyer l'email etc.)

2) Services de messagerie tels que ServiceBus / RabbitMQ

3) Si l'input va à la table db via le controller de votre application, vous pouvez passer cette valeur à un autre service / thread / process pour faire le calcul et envoyer les emails.


Copié du commentaire de Mason dans la réponse pour les futurs lecteurs: Il existe d'autres options, telles que Hangfire, FluentScheduler, Quartz, etc. Ces bibliothèques ont été conçues autour de certains des pièges de l'exécution manuelle du code en arrière-plan dans ASP.NET. Scott Hanselman les décrit dans un excellent article de blog avec un exemple de code.