예제 #1
0
            public static AsyncBlockingQueueTakeTaskSource Request(ConcurrentAsyncBlockingQueue <T> queue)
            {
                AsyncBlockingQueueTakeTaskSource source = null;

                lock (_pool){
                    if (_pool.Count == 0)
                    {
                        source = new AsyncBlockingQueueTakeTaskSource();
                    }
                    else
                    {
                        source = _pool.Pop();
                    }
                }
                source.Initialize(queue);
                return(source);
            }
예제 #2
0
        public ValueTask <T> TakeAsync()
        {
            var source = AsyncBlockingQueueTakeTaskSource.Request(this);

            return(new ValueTask <T>(source, source.Token));
        }