如何使用委托构建 TransformManyBlock
How to construct a TransformManyBlock with a delegate
我是 C# TPL 和 DataFlow 的新手,我正在努力研究如何实现 TPL DataFlow TransformManyBlock
。我正在将一些其他代码翻译成 DataFlow。我的(简化的)原始代码是这样的:
private IEnumerable<byte[]> ExtractFromByteStream(Byte[] byteStream)
{
yield return byteStream; // Plus operations on the array
}
在另一种方法中,我会这样称呼它:
foreach (byte[] myByteArray in ExtractFromByteStream(byteStream))
{
// Do stuff with myByteArray
}
我正在尝试创建一个 TransformManyBlock
来生成来自较大输入数组(实际上是二进制流)的多个小数组(实际上是数据包),因此输入和输出都是 byte[]
.
我尝试了下面的内容,但我知道我做错了。我想使用与以前相同的函数来构造此块,并将 TransformManyBlock
包裹在它周围。我收到一个错误 "The call is ambiguous..."
var streamTransformManyBlock = new TransformManyBlock<byte[], byte[]>(ExtractFromByteStream);
编译器在推断类型时遇到问题。您需要明确指定委托类型以消除调用歧义:
var block = new TransformManyBlock<byte[], byte[]>(
(Func<byte[], IEnumerable<byte[]>>) ExtractFromByteStream);
或者您可以使用调用该方法的 lambda 表达式:
var block = new TransformManyBlock<byte[], byte[]>(
bytes => ExtractFromByteStream(bytes));
我是 C# TPL 和 DataFlow 的新手,我正在努力研究如何实现 TPL DataFlow TransformManyBlock
。我正在将一些其他代码翻译成 DataFlow。我的(简化的)原始代码是这样的:
private IEnumerable<byte[]> ExtractFromByteStream(Byte[] byteStream)
{
yield return byteStream; // Plus operations on the array
}
在另一种方法中,我会这样称呼它:
foreach (byte[] myByteArray in ExtractFromByteStream(byteStream))
{
// Do stuff with myByteArray
}
我正在尝试创建一个 TransformManyBlock
来生成来自较大输入数组(实际上是二进制流)的多个小数组(实际上是数据包),因此输入和输出都是 byte[]
.
我尝试了下面的内容,但我知道我做错了。我想使用与以前相同的函数来构造此块,并将 TransformManyBlock
包裹在它周围。我收到一个错误 "The call is ambiguous..."
var streamTransformManyBlock = new TransformManyBlock<byte[], byte[]>(ExtractFromByteStream);
编译器在推断类型时遇到问题。您需要明确指定委托类型以消除调用歧义:
var block = new TransformManyBlock<byte[], byte[]>(
(Func<byte[], IEnumerable<byte[]>>) ExtractFromByteStream);
或者您可以使用调用该方法的 lambda 表达式:
var block = new TransformManyBlock<byte[], byte[]>(
bytes => ExtractFromByteStream(bytes));