背景
我有一组工具\解决方案,它们可以组合成一个单一的数据处理\动作流。
我的流程中的每一个单元都做一个计算或做一个动作。
例子:Solve equation -> send email
在本例中,Solve equation单元是计算单元的类型。而send email单位是行动的。
这一点,我有100个不同的单位,可以合并在一个不同的顺序。
问题
为了解决这个问题,我计划为我的应用程序创建一个数据流。每个流将实现这个接口:
public interface IFlow
{
public IUnit[] UnitsChain{get;}
public void Start(string input);
}我的单位将实现这个接口:
public interface IUnit
{
public string /*output*/ Process(string input);
}这个设计中的一切听起来都是可行的,但也听起来像我“发明轮子”,而不是使用允许这些选项的现有解决方案。
寻找更好的解决方案来实现这种定制的流水线处理。
谢谢!
发布于 2021-05-10 08:43:42
这个设计中的一切听起来都是可行的,但也听起来像我“发明轮子”,而不是使用允许这些选项的现有解决方案。
微软自己的DataFlow基本上为这个功能提供了非常方便的并行化步骤等选项。
让我们把它分解:
解方程
这听起来像是TransformBlock的工作。
您将其设置为使用一个转换方法,该方法将采用(我们称之为) TInput类型,并生成TOutput (等式的结果)。
发电子邮件
我会把它再分成两个街区:
TOutput转换为电子邮件所以你还有一个Transformblock<TOutput , Email>和一个ActionBlock
(我使用“电子邮件”就像这里的一种类型。)只是个占位符。确切的类型当然取决于使用中的电子邮件框架。)
把所有的都放在一起
然后,通过“链接”TransformBlock<TInput, TOutput> => TransformBlock<TOutput, Email> => ActionBlock<Email>来构建管道。
这样做后,您已经建立了一个完整的管道到您可以提交的TInput和框架将负责其余的。每个块可以是方便配置,例如并行处理几个TInput。
它还让我们决定是使用同步API还是异步API(任务/等待)。
https://stackoverflow.com/questions/67465955
复制相似问题