예제 #1
0
        private async Task <IEnumerable <IListBlockItem <TItem> > > GetItemsFromHeaderlessBlockAsync(params ItemStatus[] statuses)
        {
            if (statuses.Length == 0)
            {
                statuses = new[] { ItemStatus.All }
            }
            ;

            await _getItemsSemaphore.WaitAsync().ConfigureAwait(false);

            try
            {
                if (_headerlessBlock.Items == null || !_headerlessBlock.Items.Any())
                {
                    var protoListBlockItems = await _listBlockRepository.GetListBlockItemsAsync(new TaskId(_applicationName, _taskName), ListBlockId).ConfigureAwait(false);

                    _headerlessBlock.Items = Convert(protoListBlockItems);

                    foreach (var item in _headerlessBlock.Items)
                    {
                        ((ListBlockItem <TItem>)item).SetParentContext(this.ItemCompleteAsync, this.ItemFailedAsync, this.DiscardItemAsync);
                    }
                }

                if (statuses.Any(x => x == ItemStatus.All))
                {
                    return(_headerlessBlock.Items.Where(x => x.Status == ItemStatus.Failed || x.Status == ItemStatus.Pending || x.Status == ItemStatus.Discarded || x.Status == ItemStatus.Completed).ToList());
                }

                return(_headerlessBlock.Items.Where(x => statuses.Contains(x.Status)).ToList());
            }
            finally
            {
                _getItemsSemaphore.Release();
            }
        }