如何使用委托构造TransformManyBlock

我是C#TPL和DataFlow的新手,我正在努力研究如何实现TPL DataFlow TransformManyBlock 。 我正在将其他一些代码翻译成DataFlow。 我的(简化)原始代码是这样的:

 private IEnumerable ExtractFromByteStream(Byte[] byteStream) { yield return byteStream; // Plus operations on the array } 

在另一种方法中,我会这样称呼它:

 foreach (byte[] myByteArray in ExtractFromByteStream(byteStream)) { // Do stuff with myByteArray } 

我正在尝试创建一个TransformManyBlock来生成来自较大输入数组(实际上是二进制流)的多个小数组(实际上是数据包),因此in和out都是byte[]类型。

我尝试了下面的内容,但我知道我错了。 我想使用与之前相同的函数构造此块,并将TransformManyBlock包装在其周围。 我收到一个错误“电话不明确……”

 var streamTransformManyBlock = new TransformManyBlock(ExtractFromByteStream); 

编译器在推断类型时遇到麻烦。 您需要明确指定委托类型以消除调用的歧义:

 var block = new TransformManyBlock( (Func>) ExtractFromByteStream); 

或者您可以使用调用该方法的lambda表达式:

 var block = new TransformManyBlock( bytes => ExtractFromByteStream(bytes));