示例#1
0
        public async Task Batch_pipeline_one_input_accumulate_to_one_output()
        {
            var result = new List <string>();

            var head = new HeadBlock <string>();

            head.Process((ct, str, md) => Task.FromResult(str + "A"))
            .Batch(3)
            .Process((ct, str, md) => Task.FromResult(string.Join(",", str)))
            .Action((ct, str, md) =>
            {
                result.Add(str);
                return(Task.CompletedTask);
            });

            var cts = new CancellationTokenSource();

            await head.PushAsync(cts.Token, "C", new PipelineMetadata()).ConfigureAwait(false);

            await head.PushAsync(cts.Token, "C", new PipelineMetadata()).ConfigureAwait(false);

            await head.PushAsync(cts.Token, "C", new PipelineMetadata()).ConfigureAwait(false);

            // this one will be lost because of the batching
            await head.PushAsync(cts.Token, "C", new PipelineMetadata()).ConfigureAwait(false);

            await head.FlushAsync(cts.Token).ConfigureAwait(false);

            result.Count.Should().Be(2);
            result[0].Should().Be("CA,CA,CA");
            result[1].Should().Be("CA");
        }