11得票2回答
我应该翻译成:在哪里可以找到适用于4.0的TPL数据流版本?

我正在寻找TPL数据流库的.NET 4.0版本。 Nuget包有一个4.0版本的库,但似乎针对的是.NET 4.5。 我在这个论坛中找到了各种关于4.0版本的参考资料: http://social.msdn.microsoft.com/Forums/en-US/tpldataflow/t...

10得票1回答
意外行为- TPL DataFlow BatchBlock在TriggerBatch执行时拒绝项目

当您创建带有有限容量的批处理块并在同时发布新项目时调用triggerBatch-在触发批处理执行期间,发布新项目将失败。 调用Trigger batch(每隔X时间)是为了确保数据不会在块中延迟太长时间,在传入数据流暂停或减慢的情况下。 以下代码将输出一些“发布失败”事件。例如: p...

8得票2回答
使用TPL Dataflow进行网络命令处理

我正在开发一个系统,涉及通过TCP网络连接接受命令,然后在执行这些命令后发送响应。这是相当基本的东西,但我希望支持以下几个要求: 1. 多个客户端可以同时连接并建立独立的会话。会话可以持续多长时间或者短暂,同一客户端IP可以建立多个并行会话(如果需要)。 2. 每个会话可以同时处理多个命令,...

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

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

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

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

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

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

68得票3回答
限制异步任务的执行速率

我想同时运行一些异步任务,并限制在任何给定时间内等待完成的任务数量。比如你有1000个URL,每次只想打开50个请求;但是只要一个请求完成,就会打开到列表中下一个URL的连接。这样,始终只有50个连接处于打开状态,直到URL列表耗尽。 如果可能的话,我也想利用给定数量的线程。 我已经编写了...

8得票2回答
一个TPL Dataflow块下游如何获取由源产生的数据?

我正在使用TPL Dataflow处理图像。我接收到一个处理请求,从流中读取图像,应用多个转换,然后将结果图像写入另一个流: Request -> Stream -> Image -> Image ... -> Stream 为此,我使用块: BufferBlo...

8得票2回答
如何限制通过整个Dataflow管道并发传递的项数?

我希望限制Dataflow管道中发布的项目数量。该数量取决于生产环境。这些对象(图像)消耗大量内存,因此我希望在管道的最后一个块完成其工作时再发布它们。 我尝试使用SemaphoreSlim来限制生产者并在管道的最后一个块中释放它。虽然它有效,但如果在过程中出现异常,程序将永久等待且无法拦截...

9得票1回答
如何在TPL Dataflow中进行异步操作以获得最佳性能?

我编写了下面的方法来批量处理一个巨大的CSV文件。思路是将文件中的一块行读入内存,然后将这些行分成固定大小的批次。一旦我们得到分区,就将这些分区发送到服务器(同步或异步),这可能需要一段时间。 private static void BatchProcess(string filePath,...