我想从自己的AppDomain下面开始潜在的长时间运行线程,以防止Web服务器在回收期间中止它。它编译罚款,但在运行时我得到这个神秘的错误在AppDomain中创建与AppDomain相同的新AppDomain调用方法
类型未解决的成员“MyCore.MyWebService,MyCore, 版本= 5.0.0.0,文化=中立,公钥=空”。
如何找出哪些成员没有解决?
有没有更好的方法在MVC业务服务层中运行长久的线程,但不会因服务器回收机制而中止?
下面是代码:
namespace MyCore
{
[Serializable]
public class MyWebService : IMyWebService
{
AppDomain domain = AppDomain.CreateDomain("Domain");
Thread.CurrentThread.Name = "MVCThread";
domain.SetData("lDatabaseID", lDatabaseID);
domain.DoCallBack(() =>
{
long lID = Convert.ToInt64(AppDomain.CurrentDomain.GetData("lDatabaseID"));
Thread thread = new Thread(
(() =>
{
PopulateTables(lID);
}));
thread.Name = "DomThread";
thread.Start();
});
}
}
是什么让你认为在新的AppDomain中启动一个线程会阻止IIS回收你的ASP.NET应用程序和整个w3p关联的进程?您可以简单地忘记在IIS中的后台线程上执行可靠的长时间运行任务。这不是Web服务器的设计目的。 –
你是对的,我捅了一下,可能已经找到了使用Hangfire的解决方案。 – aggaton