Well, through the link from @SirRufo, I started thinking about implementing my own TransformBlock , which would fit my needs and process incoming elements without respect for the order. Thus, this will not ruin the network, creating a gap between the blocks in the download part and will be an elegant way.
So, I began to look at what and how I can do. Studying TransformBlock sources seemed like a good starting point, so I discovered TransformBlock sources on Github and started analyzing This.
From the very beginning of the class, I found this interesting thing: // If parallelism is used, we will need to support reordering messages that end out of order.
// However, a developer can override this with EnsureOrdered == false. if (dataflowBlockOptions.SupportsParallelExecution && dataflowBlockOptions.EnsureOrdered) { _reorderingBuffer = new ReorderingBuffer<TOutput>(this, (owningSource, message) => ((TransformBlock<TInput, TOutput>)owningSource)._source.AddMessage(message)); }
Looks like what we want! Let's look at this EnsureOrdered option in the DataflowBlockOptions class on Github :
It looked very good, so I immediately switched to the IDE to install it. Unfortunately, there were no such settings:

I continued searching and found this note :
4.5.25-beta-23019
The package has been renamed to System.Threading.Tasks.Dataflow
When I googled and found this package , it is called System.Threading.Tasks.Dataflow ! So I uninstalled the Microsoft.Tpl.Dataflow package and installed System.Threading.Tasks.Dataflow by issuing:
Install-Package System.Threading.Tasks.Dataflow
And there was an EnsureOrdered option. I updated the code from setting EnsureOrdered to false :
using System; using System.Diagnostics; using System.Linq; using System.Net.Http; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; namespace DataflowTest { class Program { static void Main(string[] args) { var options = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 4, EnsureOrdered = false }; var firstBlock = new TransformBlock<int, string>(x => x.ToString(), options); var secondBlock = new TransformBlock<string, Tuple<string, string>>(async x => { using (var httpClient = new HttpClient()) { if (x == "4") await Task.Delay(5000); var result = await httpClient.GetStringAsync($"http://scooterlabs.com/echo/{x}"); return new Tuple<string, string>(x, result); } }, options); var thirdBlock = new TransformBlock<Tuple<string, string>, Tuple<string, byte[]>>(x => { using (var algorithm = SHA256.Create()) { var bytes = Encoding.UTF8.GetBytes(x.Item2); var hash = algorithm.ComputeHash(bytes); return new Tuple<string, byte[]>(x.Item1, hash); } }, options); var fourthBlock = new ActionBlock<Tuple<string, byte[]>>(x => { var output = $"{DateTime.Now}: Hash for element #{x.Item1}: {GetHashAsString(x.Item2)}"; Console.WriteLine(output); }, options); firstBlock.LinkTo(secondBlock); secondBlock.LinkTo(thirdBlock); thirdBlock.LinkTo(fourthBlock); var populateTasks = Enumerable.Range(1, 10).Select(x => firstBlock.SendAsync(x)); Task.WhenAll(populateTasks).ContinueWith(x => firstBlock.Complete()).Wait(); fourthBlock.Completion.Wait(); } private static string GetHashAsString(byte[] bytes) { var sb = new StringBuilder(); int i; for (i = 0; i < bytes.Length; i++) { sb.AppendFormat("{0:X2}", bytes[i]); if (i % 4 == 3) sb.Append(" "); } return sb.ToString(); } } }
And the result of the result was exactly what I want:
10.08.2016 11:03:23: Hash for element #3: 8BA8A86D F25E058E 180F7AA9 1EE996B0 8D721C84 AEE8AA19 0A3F7C44 9FFED481 10.08.2016 11:03:23: Hash for element #1: 8BA8A86D F25E058E 180F7AA9 1EE996B0 8D721C84 AEE8AA19 0A3F7C44 9FFED481 10.08.2016 11:03:23: Hash for element #2: 8BA8A86D F25E058E 180F7AA9 1EE996B0 8D721C84 AEE8AA19 0A3F7C44 9FFED481 10.08.2016 11:03:23: Hash for element #10: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:23: Hash for element #8: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:23: Hash for element #9: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:23: Hash for element #5: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:23: Hash for element #7: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:23: Hash for element #6: C8C87B26 B17A6329 3F6213CD 4F9AFE0D 4F90127B AAE49EB0 7D8C15DF 74F020B1 10.08.2016 11:03:27: Hash for element #4: FD25E52B FCD8DE81 BD38E11B 13C20B96 09473283 F25346B2 04593B70 E4357BDA