首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >管道系统设计

管道系统设计
EN

Stack Overflow用户
提问于 2021-05-10 06:50:17
回答 1查看 101关注 0票数 1

背景

我有一组工具\解决方案,它们可以组合成一个单一的数据处理\动作流。

我的流程中的每一个单元都做一个计算或做一个动作。

例子:Solve equation -> send email

在本例中,Solve equation单元是计算单元的类型。而send email单位是行动的。

这一点,我有100个不同的单位,可以合并在一个不同的顺序。

问题

为了解决这个问题,我计划为我的应用程序创建一个数据流。每个流将实现这个接口:

代码语言:javascript
复制
public interface IFlow
{
    public IUnit[] UnitsChain{get;}
    
    public void Start(string input);
}

我的单位将实现这个接口:

代码语言:javascript
复制
public interface IUnit
{
    public string /*output*/ Process(string input);
}

这个设计中的一切听起来都是可行的,但也听起来像我“发明轮子”,而不是使用允许这些选项的现有解决方案。

寻找更好的解决方案来实现这种定制的流水线处理。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-10 08:43:42

这个设计中的一切听起来都是可行的,但也听起来像我“发明轮子”,而不是使用允许这些选项的现有解决方案。

微软自己的DataFlow基本上为这个功能提供了非常方便的并行化步骤等选项。

让我们把它分解:

解方程

这听起来像是TransformBlock的工作。

您将其设置为使用一个转换方法,该方法将采用(我们称之为) TInput类型,并生成TOutput (等式的结果)。

发电子邮件

我会把它再分成两个街区:

  1. TOutput转换为电子邮件
  2. 发送电子邮件

所以你还有一个Transformblock<TOutput , Email>和一个ActionBlock

(我使用“电子邮件”就像这里的一种类型。)只是个占位符。确切的类型当然取决于使用中的电子邮件框架。)

把所有的都放在一起

然后,通过“链接”TransformBlock<TInput, TOutput> => TransformBlock<TOutput, Email> => ActionBlock<Email>来构建管道。

这样做后,您已经建立了一个完整的管道到您可以提交的TInput和框架将负责其余的。每个块可以是方便配置,例如并行处理几个TInput

它还让我们决定是使用同步API还是异步API(任务/等待)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67465955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档