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