16得票1回答
TPL Dataflow和响应式扩展(Rx)相比,有哪些使用案例?

我正在考虑用其中之一或两者的组合编写一些信号处理算法。 性能不是重点,更重要的是表达意图的清晰度。 我将实现以下“块”并组合它们: 滤波器(FIR和IIR) 相位检测器 积分器 混频器 函数发生器 PLL(使用以上模块构建) 我明白Rx可以被认为是“Linq-to-streams”...

23得票2回答
BufferBlock在TryReceiveAll后使用OutputAvailableAsync时出现死锁

在回答这个问题期间,我编写了以下代码段:an answervar buffer = new BufferBlock<object>(); var producer = Task.Run(async () => { while (true) { ...

8得票1回答
如何在捕获的ExecutionContext上运行异步委托

正如Stephen Toub在这篇文章中所解释的那样,当您向ActionBlock提交消息时,可以在调用ActionBlock.Post之前执行ExecutionContext.Capture,将同时包含消息和ExecutionContext的DTO传递到块中,然后在消息处理委托内使用Exec...

8得票1回答
如何正确管理TPL Dataflow中的完成状态。

我创建了一个类似于网络爬虫的程序来生成我需要管理的1000多个 Web 服务的报告。为此,我创建了一个 TPL Dataflow Pipeline 来管理获取和处理数据。 我想象中的 Pipeline 程序看起来有点像这样(我的绘画技能很差 :D): 我已经创建了实现,并且一切都正常工作,...

9得票1回答
优先级TPL数据流缓冲块

应该是一件非常自然的事情,我想知道TPL DataFlow库中是否有Prioritized BufferBlock的现成实现?

9得票3回答
TPL数据流块消耗了所有可用内存。

我有一个TransformManyBlock块,其设计如下: 输入:文件路径 输出:文件内容的IEnumerable,每行一个 我正在处理一个超大文件(61GB),因为它太大无法放入内存,所以我将此块和所有下游块的BoundedCapacity设置为非常低的值(例如1)。然而,该块显然...

12得票2回答
这适合使用TPL Dataflow吗?

我在不同的任务上运行了一个相当典型的生产者/消费者模型。 任务1:从二进制文件中读取byte[]批次,并为每个byte数组集合启动一个新任务(该操作进行批处理以进行内存管理)。 任务2-n:这些是工作任务,每个任务都在传入的byte数组集合(来自任务1)上操作,对byte数组进行反序列化,...

54得票2回答
实现可重试代码块的正确完成

提示:各位,这个问题不是关于如何实现重试策略的,而是关于正确完成TPL Dataflow块的。 这个问题主要是我之前的一个问题Retry policy within ITargetBlock的延续。对于这个问题的答案是@svick的聪明解决方案,利用了TransformBlock(源)和Tra...

22得票3回答
I/O性能 - 异步 vs TPL vs Dataflow vs RX

我有一段生成大量网络和磁盘I/O的C# 5.0代码,需要并行运行多个副本。以下哪种技术可能会给我最好的性能: 使用await的async方法 直接使用TPL中的Task TPL Dataflow nuget 响应式扩展 我对这个并行化的东西不是很擅长,但如果使用像Thread这样的低级...

24得票3回答
跳过数据流TransformBlock中的项目

TPL Dataflow 提供了一个用于转换输入的TransformBlock,例如:var tb = new TransformBlock<int, int>(i => i * 2); 是否可能不输出输入的某些部分,例如如果输入未通过某些验证测试?var tb = new ...