我需要一个需要永远运行每个x秒的操作,并且要实现这一点,我做到了:
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();
}
}
一段时间(约5分钟)后,我得到此错误:
“ mscorlib.dll中发生了'System.StackOverflowException'类型的未处理异常”
这个错误与我如何使无限循环有关吗?
如果是,是否有更好的方法可以解决此问题,我可以解决此问题,还是可以使用此代码?
最佳答案
您正在递归调用“ CheckStatus”。因此,每8秒在您的调用堆栈中就会有一个条目:CheckStatus()
-> CheckStatus()
-> CheckStatus()
->等等,直到得到StackOverflowException。
相反,您应该使用
while (true)
{
/* Your Code */
Thread.Sleep(8000);
}
另请注意,默认情况下,如果15分钟内没有请求,IIS将卸载您的应用程序,从而导致您的线程被杀死。
关于c# - 在.Net MVC中进行无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13787020/