我需要一个需要永远运行每个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/

10-10 15:40