Безопасность потоков при запуске приложения

#c# #asp.net #locking #application-start

#c# #asp.net #блокировка #запуск приложения

Вопрос:

У меня есть ASP.NET приложение, в котором я пишу этот код в событии Application_OnStart:

 public virtual void OnStart(HttpApplication httpApplication)
{
    MyClass.PopulateIndices();
}
  

Теперь я знаю, что App_Onstart это запускается только один раз, поэтому мой вопрос: нужно ли мне добавлять безопасность потоков в этот код, например:

 lock(some object)
{
    MyClass.PopulateIndices();
}
  

Это lock() действительно необходимо? Могут ли несколько потоков запускать приложение OnStart одновременно?

Ответ №1:

Он будет вызван только один раз. Определенно. Там вам не нужна никакая блокировка.

Из MSDN:

Метод Application_Start вызывается только один раз в течение жизненного цикла приложения.

Источник: http://msdn.microsoft.com/en-us/library/ms178473.aspx

Комментарии:

1. Что, если я использую одну и ту же папку приложения для нескольких веб-сайтов, она все равно вызывается один раз? Как я могу воспроизвести это?

Ответ №2:

Я протестировал это с некоторым протоколированием, и Application_Start выполняется только один раз (в то время как, например, Session_Start выполняется при запуске сеанса каждого пользователя).

вам не понадобится блокировка.

Ответ №3:

Я рекомендую вам только serviceAutoStartProviders в том случае, если вместо этого вы используете .NET 4.0:

Автозапуск ASP.NET Приложения (версии 2010 и .NET 4.0)