I'm developing a .NET 4 application that requires a backend worker thread to be running. This thread consists mostly of the following code:
while (true) {
//Check stuff in database
//Do stuff
//write to database / filesystem
Thread.sleep(60000)
}
The ASP.NET app is just a frontend for the database.
My question is around where the best place to put this worker loop would be. It seems my immediate two choices would be (1) to spin it off from the Application_Start
method, and just let it run, or (2) bundle it in a separate process (Windows service?)
(1) would obviously need some logic in the ASP.NET code to check it's still running, as IIS might kill it. It's also quite neat in that the whole application logic is in one, easily deployable package. (2) is much more segregated, but feels a lot messier.
What's the best approach?
Consider something simple like Hangfire and then think about the design points in this related answer.
I would strongly opt for the Windows Service if possible. Background threading in ASP.NET comes with a lot of baggage.
And plenty more.