ASP.NET线程无法在生产中工作

时间:2009-02-11 18:25:58

标签: asp.net multithreading

由于某些奇怪的原因,我无法在我的生产环境中将任何功能作为新线程运行,即使它在登台服务器上本地工作正常,并且与生产服务器具有相同的规格(Windows 2003,IIS 6)

这是我的代码:

System.Threading.Thread th = new System.Threading.Thread(TestFunction);
th.Start();

这就是功能:

public void TestFunction()
{
   LogUtility.Log("hello world");
}

在开始之后,没有其他任何东西被访问。是否有某些设置可能导致此行为? th.ThreadState在TestFunction的持续时间内返回“running”。

(LogUtility.Log只将文本写入文件)

编辑:这实际上在以前工作,它只是停止了无处不在。

3 个答案:

答案 0 :(得分:1)

原来是因为我在使用模拟并且在创建新线程时模拟不适用。这是我修复它的方式,以便线程使用与调用函数相同的模拟:

public static WindowsIdentity ident;

public void ProcessRequest(HttpContext context)
{
    ident = WindowsIdentity.GetCurrent();
    System.Threading.Thread th = new System.Threading.Thread(ThreadedFunction);
    th.Start();
}

public void ThreadedFunction()
{
    WindowsImpersonationContext c = null;
    try
    {
        c = ident.Impersonate();
        // Your code here
    }
    finally
    {
        if (c != null) c.Undo();
    }
}

答案 1 :(得分:0)

这可能与安全有关吗?线程操作需要相当高的CAS(代码访问安全性)权限,并且在托管环境中,您可能正在运行受限制的权限。

答案 2 :(得分:0)

您确定不仅仅是LogUtility失败吗?当存在一个更简单的解释时,我不会那么快就怀疑线程系统:)。