У меня есть объект Singleton в приложении со следующим свойством:
private AllocationActionsCollection AllocationActions
{
get
{
return HttpContext.Current.Session["AllocationOptions.AllocationActions"] as AllocationActionsCollection;
}
set
{
HttpContext.Current.Session["AllocationOptions.AllocationActions"] = value;
}
}
Я имею дело с одной ошибкой (HttpContext.Current.Session["AllocationOptions.AllocationActions"] имеет значение null, хотя предполагается, что для меня всегда установлено значение допустимого экземпляра...). Я только что прочитал в MSDN, что член экземпляра HttpContext не гарантирует потокобезопасность! Интересно, может ли это быть проблемой? Где-то в приложении может быть гонка за ресурсами, и момент, когда HttpContext.Current.Session["AllocationOptions.AllocationActions"] равен null, является моментом, когда установщик AllocationActions используется с помощью этого оператора:
AllocationActions = new AllocationActionsCollection(Instance.CacheId);
Мои вопросы:
а) Я шокирован тем, что HttpContext.Current.Session не является потокобезопасным. Как тогда безопасно использовать это свойство? б) есть ли у вас какие-либо идеи, почему эта переменная сеанса может быть нулевой (хотя я почти уверен, что устанавливаю ее до того, как она будет использована в первый раз)?
Спасибо, Павел
РЕДАКТИРОВАТЬ 1:
а) строка, которая инициализирует переменную сеанса, устанавливается каждые 2 минуты с помощью следующего оператора (выполняется в Page_Load)
AllocationActions = new AllocationActionsCollection(Instance.CacheId);
б) код, который вызывает геттер, вызывается в обработчиках событий (например, Button_Click)
c) в приложении нет пользовательских потоков. единственный общий обработчик HTTP