问题标签 [tpl-dataflow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
834 浏览

c# - TPL 数据流。无法将 BatchBlock 附加到 ActionBlock。不能从用法推断类型参数?

我有这个批处理块

而这个 ActionBlock 作为

当我尝试将它们附加为

batchBlock.LinkTo(actionBlock);

我收到一条错误消息The type arguments for method System.Threading.Tasks.Dataflow.DataflowBlock.LinkTo<TOutput>(System.Threading.Tasks.Dataflow.ISourceBlock<TOutput>, System.Threading.Tasks.Dataflow.ITargetBlock<TOutput>)' cannot be inferred from the usage. Try specifying the type arguments explicitly

即使我这样做,我也会遇到同样的错误..

batchBlock.LinkTo((ActionBlock<IEnumerable<string>>)actionBlock);

但是,编译器不会抱怨,而不是ActionBlock在构造函数中附加一个 create a new ,例如

谁能告诉我我做错了什么?为什么它不让我附上我actionBlockbatchBlock???

0 投票
2 回答
350 浏览

c# - 过滤 BlockBuffer.RecieveAsync 的正确方法

再会。

我有一个用于 rpc 调用的 TPL 数据流网格

它有两个未扭结的流程,简化后如下所示:

输出流量:

  • BlockBuffer 存储输出
  • ActionBlock 将输出发送到服务器并生成发送的 id

和输入流:

  • while循环接收数据
  • TransformBlock 解析数据
  • BlockBuffer 用 sentid 保存答案

有一个问题:当我从不同的线程拨打电话时,我可能会弄乱答案,所以我需要过滤它。

我的 RPC 调用:

如您所见,我有 uniqueId 可以帮助我确定此呼叫的答案,但是我如何过滤它并等待它?

拥有一些缓冲区数组(可能是WriteOnceBlock?)是一个好方法吗?这些缓冲区将在rpc调用中创建并带有过滤器的LinkedTo?

0 投票
1 回答
5172 浏览

c# - 等待动作块- TPL 数据流

我正在使用 TPL DataFlow 和 ActionBlock 来创建并行性。使用 TPL DataFlow 的原因是因为它支持异步,但我无法让它工作。

消息框几乎立即显示,尽管 ActionBlocks 仍在运行。await在 ActionBlock 完成之前我该怎么做?

0 投票
2 回答
789 浏览

.net - 比 TPL Dataflow 更简单的并行异步 blob 删除解决方案

我在 Azure 上实现了一个工作角色,它需要从 Azure 存储中删除 blob。假设我的 blob 列表有大约 10K 项。

最简单的同步方法可能是:

要求:

  • 我想异步实现相同的东西(在单个线程上)。

  • 我想将并发连接数限制为 50 - 所以当同时只执行 50 个异步连接时,我将执行 10K 删除。如果一个删除完成,可以开始一个新的。

解决方案?

到目前为止,在阅读了这个问题这个问题之后,似乎TPL Dataflow是要走的路。

这是一个如此简单的问题,数据流似乎有点过头了。有没有更简单的选择?

如果没有,这将如何使用数据流来实现?据我了解,我需要一个执行async删除的操作块(我需要await吗?)。创建我的块时,我应该设置MaxDegreeOfParallelism为 50。然后我需要将我的 10K blob 从列表中发布到块,然后使用block.Completion.Wait(). 它是否正确?

0 投票
1 回答
1375 浏览

.net - TPL DataFlow:创建自定义拆分块

只需要一些帮助,借助数据流库创建自定义拆分块,该库是 .Net 中 TPL 的一部分。

我想要实现的只是一个简单的自定义块,它接受输入并将其拆分为多个变换块。这是过滤数据所必需的,我可以在其中记录负面条目并继续使用好的条目。

对于我的需要,将输入分成两个不同的输出就足够了。类头应该看起来像这样......

我的问题是我真的不知道该怎么做。我只知道我需要两个 TransformBlock:

在我所有的尝试中,我最终有多个 ITargetBlocks 用于存储左右块的输入,但这不可能是正确的,可以吗?

我很感激你能给的每一个提示。

0 投票
1 回答
144 浏览

c# - tpl 数据流:生产者起始块

我试图建立一个管道,第一个块将是生产者块。它进入一个 Enum 对象,并据此产生大量数据。此数据应在到达时自动发送到管道的以下步骤。

有没有办法做到这一点?还是我需要创建一个自定义块?

0 投票
1 回答
109 浏览

vb.net - 在 BatchedJoinBlock(Of T1, T2) 上使用 Orderby - 数据流(任务并行库)

我只是希望能够对 BatchedJoinBlock ( http://msdn.microsoft.com/en-us/library/hh194683.aspx ) 的结果进行排序,以便不同目标的不同结果保持在一起。我会解释!一些伪代码中的示例:

基本上我有一个字符串和一个对象,上面的 SortByResult 变量完全按照我希望它们排序的方式对字符串进行排序。我正在寻找一种方法来将 target2 中曾经位于相同索引号的对象按相同顺序排列。例如,如果“String1Target1”更改顺序,我想以某种方式可靠地将其与“StringBuilder1”一起引用/配对。实际的最终结果只需要将对象(target2)按照被排序的字符串(target1)指定的顺序进行排序。就像是:

但我很乐意采取中间解决方案!我也尝试过使用带有字符串作为键的字典(results.Item2.ToDictionary)(这也是一个很好的解决方案),但是在适当的上下文中使用lamba表达式有点超出我的理解。实际上,我可以通过列表或其他内容分几个步骤执行此操作,但我正在尝试获得更高效/学习的东西,而且似乎有很多默认选项与我只是没有的联合块的结果有足够的使用经验。提前感谢您提供的任何帮助!

0 投票
1 回答
2895 浏览

c# - tpl 数据流:固定缓冲区大小而不会丢弃项目

在玩过数据流之后,我遇到了一个新问题。我想限制所有块的输入队列。我的生产块 (ActionBlock) 正在快速创建 5000 个元素并将它们发布到广播块。因此,如果我将广播块的 BoundedCapacity 设置为 100,他会丢弃大量数据。但我更希望生产块等待我的缓冲区块的输入队列中的新插槽。

有没有办法摆脱这个问题?

0 投票
2 回答
482 浏览

c# - c#数据流或任务,消费消息并行处理

如果我想从外部队列中获取消息,请说 inRedis或类似的。让一个线程不断检查队列并将消息发送到相关BroadcastBlock的处理(例如)是否更好

然后哪个将广播到管道进行处理,或者说 4 个Tasks都从队列中取出消息并自己处理它们更好?

在第一种情况下,TPL DataFlow块实际上是并行处理的,还是它们需要在单独的任务中?我正在尝试决定哪种方法可以充分利用资源。建议表示赞赏。

0 投票
1 回答
935 浏览

task-parallel-library - 从 Web Api 请求启动后台任务

我有一个 ASP.WEB Web Api 控制器,需要触发并忘记一些慢代码。什么是这样做的好方法?那就是我希望控制器向浏览器返回 HTML 响应,而慢速代码继续在某处运行。

从线程池中获取一个工作线程并传入一个由控制器创建的复杂对象是一个好主意吗?还是我需要编写一个单独的 Windows 服务来完成这项工作?