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(); } }