#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: