默认情况下,即使并行处理,数据流也会保留消息的顺序。
要尽可能快地转换消息(即无序),请设置
EnsureOrdered
到
false
在你的选择中
TransformBlock
.
确保使用最新版本的dataflow(目前是nuget软件包)
System.Threading.Tasks.Dataflow
存在于版本4.9中),如
重新排序
并不总是存在。
例子:
class Program
{
static void Main( string[] args )
{
var transformBlock = new TransformBlock<int, int>( x =>
{
Thread.Sleep( x );
return x;
}, new ExecutionDataflowBlockOptions {EnsureOrdered = false, MaxDegreeOfParallelism = 10} );
var actionBlock = new ActionBlock<int>( x => Console.WriteLine( x ) );
transformBlock.LinkTo( actionBlock, new DataflowLinkOptions {PropagateCompletion = true});
for( var i = 9; i > 0; i-- )
transformBlock.Post( i * 1000 );
transformBlock.Complete();
actionBlock.Completion.Wait();
Console.ReadLine();
}
}
这个输出
1000
2000
3000
4000
5000
6000
7000
8000
9000