Я пытаюсь установить блокировку статического строкового объекта для доступа к кэшу. Блок lock () выполняется в моем локальном компьютере, но всякий раз, когда я развертываю его на сервере, он блокируется навсегда. я записываю каждый шаг в журнал событий, чтобы увидеть процесс, и блокировка (объект) просто вызывает тупик на сервере. Команда сразу после lock () никогда не выполняется, так как я не вижу записи в журнале событий.
ниже код:
public static string CacheSyncObject = "CacheSync";
public static DataView GetUsers()
{
DataTable dtUsers = null;
if (HttpContext.Current.Cache["dtUsers"] != null)
{
Global.eventLogger.Write(String.Format("GetUsers() cache hit: {0}",dtUsers.Rows.Count));
return (HttpContext.Current.Cache["dtUsers"] as DataTable).Copy().DefaultView;
}
Global.eventLogger.Write("GetUsers() cache miss");
lock (CacheSyncObject)
{
Global.eventLogger.Write("GetUsers() locked SyncObject");
if (HttpContext.Current.Cache["dtUsers"] != null)
{
Global.eventLogger.Write("GetUsers() opps, another thread filled the cache, release lock");
return (HttpContext.Current.Cache["dtUsers"] as DataTable).Copy().DefaultView;
}
Global.eventLogger.Write ("GetUsers () заблокирован SyncObject"); ==> это никогда не записывается в журнал, поэтому для меня это означает, что lock () никогда не выполняется.