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

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

64得票2回答
TPL Dataflow,Post()和SendAsync()之间的功能区别是什么?

我对通过Post()或SendAsync()发送项目的区别感到困惑。我的理解是,无论何时,一旦一个项目达到数据块的输入缓冲区,控制权就会返回给调用上下文,对吗?那么我为什么需要SendAsync呢?如果我的假设不正确,那么相反的是,如果使用数据块的整个思路是建立并发和异步环境,那么为什么有人要...

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

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

34得票5回答
TPL Dataflow,只有在所有源数据块完成时才能保证完成。

当两个transformblocks都完成时,我如何重写代码才能使代码完成呢? 我认为完成意味着标记已完成并且“ out队列”为空?public Test() { broadCastBlock = new BroadcastBlock<int>(i =&gt...

32得票1回答
TPL Dataflow中使用BroadcastBlock出现重复异常

我尝试使用TPL数据流来创建一个管道。到目前为止一切都工作正常,我的管道定义如下(虽然我的问题只涉及广播器、提交成功和提交失败):// Define tasks var productListingBatchBuffer = new BufferBlock<PostSubmissionS...

26得票3回答
使用BufferBlock<T>在数据流网络中的好处

我想知道使用与一个或多个ActionBlock链接的BufferBlock是否有其他好处,而不仅仅是限流(使用BoundedCapacity),而直接将消息发送到ActionBlock(只要不需要限流)。

25得票1回答
System.Threading.Tasks.Dataflow 和 Microsoft.Tpl.Dataflow 有什么区别?

有2个不同的官方TPL Dataflow Nuget包。我不确定应该选择哪一个。 据我了解,System.Threading.Tasks.Dataflow版本比另一个要新一些,并且似乎是针对最新版本的.NET。是否有人能解释一下它们之间的区别?

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

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

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

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

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

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