在.Net MVC中进行无限循环

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'类型的未处理异常"

这个错误可以与我如何制作无限循环有关吗?

如果是,是否有更好的方法来实现这一点,我可以解决它,或者这个代码是否正常?

Gum*_*zak 5

考虑为这样的事情创建Windows服务,而不是滥用II ..

我不知道在哪里,但我读到IIs不适合创建像javas服务器那样的长期生活服务.


小智 5

你递归地调用"CheckStatus".因此,每隔8秒,您的调用堆栈中将再有一个条目:

CheckStatus()- > CheckStatus()- > CheckStatus()- >依此类推..直到得到StackOverflowException.

相反,你应该使用

while (true)
{
    /* Your Code */
    Thread.Sleep(8000);
}
Run Code Online (Sandbox Code Playgroud)

另请注意,默认情况下,如果在15分钟内没有请求,IIS将卸载您的应用程序,从而导致您的线程被杀死.