PROJET AUTOBLOG


HowTommy

source: HowTommy

⇐ retour index

Créer un processus d'arrière-plan en ASP.Net

jeudi 12 décembre 2013 à 12:00
Clavier

Lorsqu'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