Ответ 1
Это похоже на проблему синхронизации. Простым решением было бы иметь общий объект блокировки (внутри вашего класса):
private static object _lock = new object();
Затем ваш код будет выглядеть следующим образом:
string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString();
lock (_lock) {
if (!HttpContext.Current.Items.Contains(ocKey))
{
HttpContext.Current.Items.Add(ocKey, new ElevationEntityModel(EFConnectionString));
}
_eem = HttpContext.Current.Items[ocKey] as ElevationEntityModel;
}
Блок блокировки в основном означает, что, когда поток входит в блок блокировки, ни один другой поток не может получить доступ к этому блоку до тех пор, пока не закончится первый поток. Это остановит конфликт между методом "Содержит" и "Добавить".
Примечание: Если в другом месте приложения вы получаете доступ к коллекции Items в HttpContext.Current, вам также потребуется синхронизировать ее. Целесообразно создать пользовательскую коллекцию, добавить ее в коллекцию Items и синхронизировать с ней доступ.