Bja*_*eCK 1 c# asp.net-mvc task backgroundworker asp.net-mvc-4
我需要一个需要每隔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();
}
}
Run Code Online (Sandbox Code Playgroud)
一段时间后(大约5分钟)我收到此错误:"mscorlib.dll中发生了'System.StackOverflowException'类型的未处理异常"
这个错误可以与我如何制作无限循环有关吗?
如果是,是否有更好的方法来实现这一点,我可以解决它,或者这个代码是否正常?
小智 5
你递归地调用"CheckStatus".因此,每隔8秒,您的调用堆栈中将再有一个条目:
CheckStatus()- > CheckStatus()- > CheckStatus()- >依此类推..直到得到StackOverflowException.
相反,你应该使用
while (true)
{
/* Your Code */
Thread.Sleep(8000);
}
Run Code Online (Sandbox Code Playgroud)
另请注意,默认情况下,如果在15分钟内没有请求,IIS将卸载您的应用程序,从而导致您的线程被杀死.