2016-10-17 4 views
2

Я знаю, что все запущенные мной потоки будут принудительно завершены, когда пул приложений будет переработан или остановлен или когда процесс завершится. Я также знаю, что IIS не предназначен или не предназначен для выполнения длительных задач.Can/will be long running thread be terminated, когда пул приложений все еще запущен

Рассмотрим следующее Global.asax

protected void Application_Start(object sender, EventArgs e) 
{ 
    _worker = new Thread(Run); 
    _worker.IsBackground = true; 
    _worker.Start(); 
} 

private void Run() 
{ 
    while(true) 
    { 
     Thread.Sleep(50000); 

     WorkWork.BeHappyTo(); 
    } 
} 

Учитывая, что процесс и пул приложений не в коей мере выключая, есть ли другой механизм в IIS, которые могут прекратить мою _worker нить, но все еще продолжают подавать новый запрос, как будто ничего не случилось?

Я ищу механизм, который следит за потоками, не связанными с запросами, временем процессора, временем часов и т. Д. И заканчивает их на основе некоторого набора эвристик.

ответ

2

Нет, ваш поток безопасен до тех пор, пока домен приложения находится. Прекращение случайных частей вашего приложения не будет хорошим дизайном для веб-фреймворка. На самом деле нет .NET API для перечисления всех потоков (слава богу).

Вы должны обрабатывать ошибки, хотя, поскольку ошибка завершит поток. Как правило, их регистрация и продолжение - правильный подход. Должны быть рассмотрены журналы.

Я считаю, что это более безопасный и простой шаблон, позволяющий планировать время за пределами приложения. Сделать запрос cron секретным URL каждые 5 секунд.

 Смежные вопросы

  • Нет связанных вопросов^_^