В моем приложении ASP.NET есть статический класс, который я использую для хранения класса обработки данных всего приложения, используемого для управления длительными пакетными операциями, отправляемыми пользователями.Это должен быть одноэлементный объект, так как это довольно тяжелый объект.
public static class WebGISGlobals
{
private static MultiStatutoryMapPrintProcessor _batchPrintProcessor;
public static MultiStatutoryMapPrintProcessor BatchPrintProcessor
{
get
{
if (_batchPrintProcessor == null)
{
_batchPrintProcessor = new MultiStatutoryMapPrintProcessor(
(string)ConfigurationManager.AppSettings["statPrintWebServiceUrl"], HttpContext.Current.Server.MapPath("~/downloads"));
}
return _batchPrintProcessor;
}
}
}
Этот класс процессора передает пакетные задачи в Threadpool для выполнения, и все работает хорошо ...
, кромекогда очередь становится пустой и процессы останавливаются в следующий раз, когда запрос одиночного значения выполняется с помощью WebGISGlobals.BatchPrintProcessor
для сбора результатов задачи, объект становится пустым и создает новый экземпляр.Это, к сожалению, лишает меня ссылки на выходные файлы, которые он создает.
Я пытался использовать Application["BatchProcessor"]
для сохранения экземпляра моего класса для всех, чтобы ссылаться, но это имеет тот же эффект.
Нигде в моемкод, я должен избавиться от экземпляра или установить его как ноль, чтобы я застрял.
У кого-нибудь есть какие-нибудь яркие идеи.
ОБНОВЛЕНИЕ:
После предложения от rsbarro я запустилтрассировка стека при выполнении потока, и она не показывает каких-либо исключений при запуске.
> WebFGH.DLL!FGH.Global.Application_End(object sender = {System.Web.HttpApplicationFactory}, System.EventArgs e = {System.EventArgs}) Line 167 C#
[Native to Managed Transition]
[Managed to Native Transition]
System.Web.dll!System.Web.HttpApplication.ProcessSpecialRequest(System.Web.HttpContext context = null, System.Reflection.MethodInfo method, int paramCount, object eventSource, System.EventArgs eventArgs, System.Web.SessionState.HttpSessionState session) + 0x110 bytes
System.Web.dll!System.Web.HttpApplicationFactory.FireApplicationOnEnd() + 0x56 bytes
System.Web.dll!System.Web.HttpApplicationFactory.Dispose() + 0x109 bytes
System.Web.dll!System.Web.HttpRuntime.Dispose() + 0x114 bytes
System.Web.dll!System.Web.HttpRuntime.ReleaseResourcesAndUnloadAppDomain(object state) + 0x35 bytes
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(object state) + 0x2f bytes
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(System.Threading._ThreadPoolWaitCallback tpWaitCallBack) + 0x53 bytes
mscorlib.dll!System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(object state) + 0x59 bytes
[Appdomain Transition]