Проверьте, работает ли поток - PullRequest
1 голос
/ 12 февраля 2009

В приложении ASP.NET MVC во время application_start новый поток получает старт. Поток загружает данные в кэш и занимает 5 минут. Приложение должно знать, что загрузка идет. Вот почему я хочу установить флаг в переменной приложения.

Я устанавливаю для Application ["LoadingCacheActive"] значение true при запуске потока. Я не нахожу способ установить эту переменную в ложь, когда поток закончен. Я не хочу использовать thread.Join, потому что application_start должен завершиться немедленно. Внутри созданного потока я не могу установить переменную, потому что HttpContext.Current недоступен.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 12 февраля 2009

Вы можете использовать статический элемент данных AutoResetEvent / ManualResetEvent в своем классе Application. Создайте событие как изначально не установленное. Когда вашему приложению необходимо проверить, завершен ли поток, оно может вызвать WaitOne (0) , чтобы проверить состояние события. Когда поток закончен, он может установить событие. Если вы используете ManualResetEvent, вам нужно сбросить его перед началом нового потока.

Вы также можете использовать Thread.ThreadState , однако, в качестве MSDN говорится:

Состояние нити представляет интерес только в сценарии отладки. Ваш код должен никогда не использовать состояние потока для синхронизации деятельность потоков.

0 голосов
/ 12 февраля 2009

Мне приходилось делать подобные вещи. Самый простой способ - очистить флаг в последней строке потока.

РЕДАКТИРОВАТЬ: Франци Пенов прав, ваш поток может быть убит при закрытии пула приложений. Однако в этом случае это не должно причинить вам вреда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...