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); }
public ValueTask <T> TakeAsync() { var source = AsyncBlockingQueueTakeTaskSource.Request(this); return(new ValueTask <T>(source, source.Token)); }