【发布时间】:2020-09-15 06:53:40
【问题描述】:
我想将 TPL 数据流用于我的 .NET Core 应用程序并关注 the example from the docs.
我不想将所有逻辑都放在一个文件中,而是将每个 TransformBlock 和 ActionBlock(我还不需要其他的)分开到它们自己的文件中。 TransformBlock 将整数转换为字符串的小例子
class IntToStringTransformer : TransformBlock<int, string>
{
public IntToStringTransformer() : base(number => number.ToString()) { }
}
还有一个小的 ActionBlock 示例将字符串写入控制台
class StringWriter : ActionBlock<string>
{
public StringWriter() : base(Console.WriteLine) { }
}
不幸的是,这不起作用,因为块类是密封的。有没有办法可以将这些块组织到它们自己的文件中?
【问题讨论】:
-
为什么要这样做?没有理由从 ActionBlock 或 TransformationBlock 继承,只是为了指定 lambda。
the block classes are sealed是的,因为根本没有理由从他们那里继承。您不需要单独的文件,只需单独的方法 -
@PanagiotisKanavos 我认为 OP 只是想让他的班级保持整洁。更多的是“代码组织”问题?
-
你用过 SSIS 数据流吗?如果没有,请在 Visual Studio 中安装 SSIS 扩展并尝试它们。您不会为 20 步管道中的每个块创建单独的类。您在一侧有可配置块的库,您可以使用这些库通过包含块、连接它们和配置它们来创建数据流文件
-
为什么?我也有复杂的操作。其中一个步骤解析 IATA DISH file,这是一种类似 COBOL 的格式,具有 100 个不同的字段。解析器本身就是一个项目。块?只需一个 TransformBlock 调用解析器并将该文件中的 10-20K 记录发送到下一个块。它甚至与解析器不在同一个项目中。
-
@Fildor 我这样做了 7 年。关键是让 OP 了解其工作原理并摆脱面向对象的思维方式。从 2000 年开始使用 SSIS 帮助了很多,因为我已经知道数据流是什么样子了。
标签: c# .net-core tpl-dataflow