Почему не вызывается Global.asax -> Application_Start
при замене myapp.dll?
Суть в том что есть задания, которые выполняются в ThreadPool
. Если заменить myapp.dll выбросится ThreadAbortException
. Я написал небольшой код для перезапуска этих заданий и вызываю его в Global.asax -> Application_Start
. Но ничего не происходить.
Как можно это реализовать?
вот код запуска
public static void RunAllWorkingOrDivideTasks()
{
try
{
Task[] tasks = TaskDataManager.GetAllTasks();
if (tasks.Length > 0)
foreach (Task task in tasks.Where(e =>
e.status == TaskStatus.active || e.status == TaskStatus.divide))
{
ThreadPool.QueueUserWorkItem(
new WaitCallback(delegate (object state)
{
Task(task.username, task.taskId);
}), null);
}
}
catch { }
}
А откуда у вас возьмутся какие-то задания при старте веб-приложения?
При замене любого бинарника IIS перезапускает веб-приложение. В ASP.NET это выглядит как выгрузка домена приложений (AppDomain). При этой операции, в том числе, очищаются любые статические поля - в том числе ваш список незавершенных задач.
Задачи, как и любые другие данные в веб-приложении, следует хранить в базе данных.
Ах да: после рестарта веб-приложение само по себе не поднимется пока к нему не придет первый запрос.
Попробуйте рецепт вот из этого ответа: При первом заходе на сайт, который крутится на IIS, сайт очень долго открывается
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть dataTableПеребираю строки с помощью foreach
Есть простое веб приложение в котором нужно вывести несколько таблицЕсть ли в ASP