Exemple #1
0
        public virtual async Task <T> GetNextItemAsync()
        {
            if (_getDataFunc == null)
            {
                throw new ArgumentNullException($"{nameof(GetDataFrom)} hasn't been called");
            }

            EnsureFetchTaskIsRunning();

            if (InternalBuffer == null)
            {
                throw new DataflowException("You must call StartInput first. The buffer has not been initialized");
            }

            var fetchCalled = TryFetchData();

            if (!HasItemsInQueue)
            {
                return(null);
            }

            //if (fetchCalled) _dataLoadSemaphore.WaitOne();
            var item = await _propagationBlock.ReceiveAsync();

            if (ItemAvailableforProcessing != null)
            {
                await ItemAvailableforProcessing.Invoke(this, new DataSourceEventArgs <object> {
                    Items = new[] { item }
                });
            }
            _signal.Set();
            return(item);
        }