Créer un processus d'arrière-plan en ASP.Net
jeudi 12 décembre 2013 à 12:00Lorsqu'on travaille en ASP.Net, on a parfois besoin de créer un processus d’arrière-plan pour certains traitements.
Dans l’idéal, on devrait passer par une application externe (application console ou service Windows), mais malheureusement, il y a certaines situations dans lesquelles on ne peut pas… Par exemple : avoir à régulièrement faire le ménage dans nos variables d’application Web.
Du coup, nous allons donc devoir coder ça nous même.
Pour cela, nous allons jouer avec le Global.asax, et les méthodes Application_Start et Application_End.
Tout d’abord, dans Application_Start, nous allons créer un nouveau Thread, en arrière-plan (background) et le démarrer :
protected void Application_Start() { // on crée notre objet thread qui pointe vers notre méthode MyBackgroundMethod Thread myBackgroundThread = new Thread(MyBackgroundMethod); // on spécifie qu’il s’agit d’un thread d’arrière-plan myBackgroundThread.IsBackground = true; // on le démarre myBackgroundThread.Start(); // on le stocke dans une variable d’application Application["myBackgroundThread"] = myBackgroundThread; }
Ensuite, nous arrêterons ce thread lorsque le service web s’arrêtera (donc dans Application_End) :
protected void Application_End() { try { // on essaie de récupérer notre thread depuis la variable d’application Thread myBackgroundThread = (Thread)Application["myBackgroundThread"]; // s’il tourney encore, on le coupe if (myBackgroundThread != null && myBackgroundThread.IsAlive == true) { myBackgroundThread.Abort(); } } catch { } }
Enfin, voici ma méthode MyBackgroundMethod avec mon code métier :
private void MyBackgroundMethod(object obj) { while (true) { System.Threading.Thread.Sleep(60000); // Mon // code // métier } }
Je pense que le code parle de lui-même, mais si vous avez des questions, n’hésitez pas !
Bon dev !
Source