由于某些奇怪的原因,我无法在我的生产环境中将任何功能作为新线程运行,即使它在登台服务器上本地工作正常,并且与生产服务器具有相同的规格(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只将文本写入文件)
编辑:这实际上在以前工作,它只是停止了无处不在。
答案 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失败吗?当存在一个更简单的解释时,我不会那么快就怀疑线程系统:)。