问题标签 [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.
c# - TPL 数据流被切断了吗?
我打算使用 TPL 数据流,但我似乎在 VS 2012 的任何地方都找不到它(包括扩展和更新/nuget 对话框的内部)。是他们剪的,还是我找错地方了?
c# - 取消操作/UI 通知和 UI 信息?
我目前正在开发一个使用 Tasks.Dataflow 的小项目,我对 UI 通知有点困惑。我想在另一个名为 的类中将我的“管道”与 UI 分开PipelineService
,但我无法通知 UI 已取消的操作或应显示在 UI 中的数据。如何以正确的方式处理?
代码:
此方法与Form1.cs
. head
是ITargetBlock<string>
.
Invoke
不使用委托方法生效。我在这里做错了什么?
c# - TPL 数据流和异步方法调用
我试图更好地理解并行处理的整个概念并设置了测试用例。在玩了测试之后,我发现在 Dataflow ActionBlock
(或TransformBlock
)中使用 Async 方法调用不会对性能产生积极影响,它只会使代码复杂化。我是否正确假设如果我使用 Dataflow Blocks,其中的代码不必是异步的,Dataflow 会自行使其异步。还是我错过了重点?
.net - 为什么“发布”不是 Dataflow.TransformBlock 的方法?不编译
在网络上的示例中,我看到有一个方法Dataflow.TransformBlock.Post()
,但我无法编译:
错误是:
“post”不是“System.Threading.Tasks.Dataflow.TransformBlock(Of Integer, Integer)”的成员。
.net - TPL 数据流链接到多个消费者不起作用
我有一个 BufferBlock 来发布消息:
这是一个 5GB 的文件,有 2400 万行。
我现在有一个使用 ActionBlock 的 Target 块:
现在在控制台应用程序中,我指定:
我将有限容量保持为 1 仅用于测试。
现在我使用 LinkTo 将这三个消费者链接到我的源:
这在 10003 行之后转到 Thread.Sleep(5000) 语句,并且 while 循环中的 Post 始终返回 false。
我期待,因为我有 LinkTo,所以完成后 solaceTargetBlocks 将能够选择下一条消息,但 LinkTo 不会清除 BufferBlock。那么,如何在多个消费者之间进行负载平衡。我是否必须接收并编写一个简单的负载平衡逻辑才能在消费者之间分配?
c# - 将动态创建的 ActionBlock 链接到 BufferBlock
我不确定这是否可能,但如果是的话,我可能做得不对。假设我有一个链接到许多消费者(ActionBlocks)的共享缓冲区。每个消费者都应该使用满足用于将其链接到缓冲区的谓词的数据。例如,ActionBlock1 应该消耗满足的数字x => x % 5 == 0
,ActionBlock2 应该只消耗x => x % 5 == 1
等等。
这是我所拥有的:
然后我打电话:
但是,这不起作用。控制台中不显示任何输出。如果我将BuildPipeline
方法修改为:
代码完成了预期的工作。
有人可以解释为什么动态创建和链接动作块不起作用吗?
PS 如果我在ITargetBlock<int> temp = BuildPipeline(5);
temp 确实显示 5 个目标链接到缓冲区之后立即中断代码。并且每个目标的ID是不同的。
提前致谢
编辑:添加了 svick 建议的更改,但仍然没有好处:
现在只有第二条生产线处理数据(满足 x % 5 == 1 谓词的那个)。并且数据不满足谓词,这意味着我得到了以 9 和 7 结尾的数字。
编辑:工作代码如下所示:
c# - 使用 BufferBlock 的好处在数据流网络中
我想知道使用链接到一个或多个 ActionBlock 的 BufferBlock 是否有好处,除了节流(使用 BoundedCapacity),而不是直接发布到 ActionBlock(只要不需要节流)。
c# - TPL DataFlow TransformBlock 输入顺序和输出顺序项不匹配
编辑:按照 svick 的建议,我用一个简单的 TransformBlock 替换了自定义 IPropagatorBlock,但是,我仍然看到输入项的顺序和输出项的顺序不匹配。在我传入的 TransformBlock 实例化和 Func 下方:
这就是我发布到转换块的方式:
原始问题:
有人帮助我使用以下自定义转换块。这个想法是发布/发送 TInput 并以异步方式对 TInput 进行操作,而自定义转换块在返回转换后的项目时保留发布项目的顺序。
例如,如果以相应的顺序发布 1、2、3,并且变换函数对每个输入进行平方并返回项目,则正确的输出值和顺序应该是 1、4、9,而不管 3 个变换操作中的哪一个在何时完成.
但是,我怀疑代码有错误,因为输出顺序不正确。更糟糕的是,混乱的订单位置是随机的,这使得调试变得更加困难,但这反映了一个事实,即显然将输入元素转换为输出元素的任务总是以不同的方式完成。
有人可以看看并可能给出一些我在这里缺少的提示吗?谢谢
c# - 异步日志记录抛出 NullReferenceException
我正在尝试使用 AsyncTargetingPack 将一些信息异步记录到针对 .NET 4.0 的 MVC 4 控制器操作内的 SQL Server。我会直接跳到 .NET 4.5,但我的应用程序存在于 Azure 中,我们仍在等待更新......
此代码按预期工作(将一行写入我的数据库,没有抛出异常):
这段代码抛出了 NullReferenceException:
NullReferenceException:“对象引用未设置为对象的实例。”
我看不到异常,因为它都是外部代码。我不明白为什么第二个代码块会失败。这是我最初编写的代码。
我究竟做错了什么?
c# - 跳过数据流 TransformBlock 中的项目
TPL Dataflow提供了一个TransformBlock
用于转换输入的方法,例如:
是否可以不输出某些输入,例如,如果输入未通过某些验证测试?
如果这不可能,那么实现这一目标的最佳模式是什么?
像下面这样的东西?