Beispiel #1
0
        public object GetWithLock(string key, int interval, bool acquireLock, out object lochkHandle)
        {
            if (!Loaded)
            {
                lochkHandle = null;
                return(null);
            }

            DateTime   startTime = DateTime.Now;
            object     value     = null;
            LockHandle handle    = null;

            TimeSpan lockInterval = new TimeSpan(0, 0, 0, 0, interval);

            while (startTime.AddMilliseconds(interval) >= DateTime.Now)
            {
                handle = null; //lochkHandle as LockHandle;

                if (cache != null)
                {
                    value = cache.Get <string>(key, true, lockInterval, ref handle);
                }

                if (value != null)
                {
                    break;
                }
                if (value == null && handle == null)
                {
                    break;
                }

                Thread.Sleep(500);
            }
            if (value == null && handle != null)
            {
                if (cache != null)
                {
                    cache.Unlock(key);
                    value = cache.Get <string>(key, true, lockInterval, ref handle);
                }
            }

            if (value != null)
            {
                lochkHandle = handle;
            }
            else
            {
                lochkHandle = null;
            }

            return(value);
        }