I need a operations which needs to run every x seconds forever, and to achieve this I did:
protected void Application_Start()
{
InitialieOnce.Initialize();
}
public static class InitialieOnce
{
private static bool initialized = false;
public static void Initialize()
{
if (initialized == false)
{
initialized = true;
Thread t = new Thread(x => CheckStatus());
t.IsBackground = true;
t.Start();
}
}
private static void CheckStatus()
{
//My script goes here.
Thread.Sleep(8000);
CheckStatus();
}
}
After some time (about 5 minutes) I get this error:
"An unhandled exception of type ‘System.StackOverflowException’ occurred in mscorlib.dll"
Can this error be related to how I made my infinite loop?
If yes, is there a better way to achieve this, can I fix it, or is this code ok?
You are calling “CheckStatus” recursively. So every 8 seconds there will be one more entry on your call stack:
CheckStatus()->CheckStatus()->CheckStatus()-> and so on.. until you get a StackOverflowException.Instead you should use
Please also note that by default IIS will unload your application if there was no request in 15 minutes, resulting in your thread being killed.