我想從自己的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