Ejemplo n.º 1
0
        /// <summary>添加实体对象进入队列</summary>
        /// <param name="entity">实体对象</param>
        /// <param name="msDelay">延迟保存的时间</param>
        /// <returns>返回是否添加成功,实体对象已存在于队列中则返回false</returns>
        public Boolean Add(IEntity entity, Int32 msDelay)
        {
            var rs = false;

            if (msDelay <= 0)
            {
                rs = Entities.TryAdd(entity, entity);
            }
            else
            {
                rs = DelayEntities.TryAdd(entity, TimerX.Now.AddMilliseconds(msDelay));
            }
            if (!rs)
            {
                return(false);
            }

            // 超过最大值时,堵塞一段时间,等待消费完成
            while (_count >= MaxEntity)
            {
                Thread.Sleep(100);
            }

            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>添加实体对象进入队列</summary>
        /// <param name="entity">实体对象</param>
        /// <param name="msDelay">延迟保存的时间</param>
        /// <returns>返回是否添加成功,实体对象已存在于队列中则返回false</returns>
        public Boolean Add(IEntity entity, Int32 msDelay)
        {
            // 首次使用时初始化定时器
            if (_Timer == null)
            {
                lock (this)
                {
                    if (_Timer == null)
                    {
                        _Timer = new TimerX(Work, null, Period, Period, "EQ")
                        {
                            Async = true
                        };
                        _Timer.CanExecute = () => DelayEntities.Any() || Entities.Any();
                    }
                }
            }

            var rs = false;

            if (msDelay <= 0)
            {
                rs = Entities.TryAdd(entity, entity);
            }
            else
            {
                rs = DelayEntities.TryAdd(entity, TimerX.Now.AddMilliseconds(msDelay));
            }
            if (!rs)
            {
                return(false);
            }

            Interlocked.Increment(ref _count);

            // 超过最大值时,堵塞一段时间,等待消费完成
            while (_count >= MaxEntity)
            {
                Thread.Sleep(100);
            }

            return(true);
        }