Esempio n. 1
0
        public async Task If_AsListWithSingleUnitCommit_BlocksProcessedSequentially_BlocksListItemsProcessedInParallel_ThenNoConcurrencyIssues()
        {
            // ACT and // ASSERT
            bool startedOk;

            using (var executionContext = ClientHelper.GetExecutionContext(TestConstants.TaskName, ClientHelper.GetDefaultTaskConfigurationWithKeepAliveAndReprocessing(10000)))
            {
                startedOk = await executionContext.TryStartAsync();

                if (startedOk)
                {
                    var   values       = GetList(100000);
                    short maxBlockSize = 1000;
                    var   listBlocks   = await executionContext.GetListBlocksAsync <PersonDto>(x => x.WithSingleUnitCommit(values, maxBlockSize));

                    foreach (var listBlock in listBlocks)
                    {
                        await listBlock.StartAsync();

                        var items = await listBlock.GetItemsAsync(ItemStatus.Failed, ItemStatus.Pending);

                        await items.ParallelForEachAsync(async currentItem =>
                        {
                            await listBlock.ItemCompleteAsync(currentItem);
                        });

                        await listBlock.CompleteAsync();

                        // All items should be completed now
                        Assert.Equal((await listBlock.GetItemsAsync(ItemStatus.Completed)).Count(), _blocksHelper.GetListBlockItemCountByStatus(listBlock.ListBlockId, ItemStatus.Completed));
                    }
                }
            }
        }