Beispiel #1
0
        /// <summary>
        /// 스택에서 요소를 꺼냄, 꺼낼 요소가 없으면 기다립니다.
        /// </summary>
        /// <returns>요소</returns>
        public virtual T Pop()
        {
            if (IsDebugEnabled)
            {
                log.Debug("Stack에서 요소를 꺼냅니다. 꺼낼 요소가 없으면 기다립니다...");
            }

            lock (_syncLock) {
                while (InnerStack.Count == 0)
                {
                    Monitor.Wait(_syncLock);
                }

                return(InnerStack.Pop());
            }
        }
Beispiel #2
0
        /// <summary>
        /// 스텍에서 요소를 꺼내본다. 꺼낼 요소가 없으면 False를 반환하고, item 은 default(T)가 설정된다.
        /// </summary>
        /// <param name="item">꺼낼 요소</param>
        /// <returns>꺼낼 요소가 없으면 False를 반환하고, item 은 default(T)가 설정된다.</returns>
        public virtual bool TryPop(out T item)
        {
            if (IsDebugEnabled)
            {
                log.Debug("스텍에서 요소를 꺼내본다. 꺼낼 요소가 없으면 기다리지 않고, False를 반환하고, item 은 default(T)가 설정된다.");
            }

            lock (_syncLock) {
                if (InnerStack.Count > 0)
                {
                    item = InnerStack.Pop();
                    return(true);
                }

                item = default(T);
                return(false);
            }
        }