AsV*_*leO 7 .net c# block task-parallel-library tpl-dataflow
TPL数据流块具有.InputCount和.OutputCount属性.但是它现在可以执行项目执行,并且没有类似的属性.Busy [Boolean].那么有没有办法知道块现在是否正在运行且其中一个项目仍在那里?

更新:
让我解释一下我的问题.pic上是我目前的Dataflow网络方案.
BufferBlock保存要加载的URL,TransformBlock通过代理服务器加载页面的数量,ActionBlock最后执行加载页面的工作.TransformBlocks已预定义.BoundedCapacity,因此BufferBlock等待任何TransformBlocks变为空闲然后将项目发布到其中.
最初我发布所有网址Buffer Block.此外,如果TransformBlock在加载HTML期间抛出异常之一,则返回它的URL BufferBlock.所以我的目标是等到我的所有URL都被保证加载和解析.现在我等着这样:
Do While _BufferBlock.Count > 0 Or _
GetLoadBlocksTotalInputOutputCount(_TransformBlocks) > 0 Or _
_ActionBlock.InputCount > 0
Await Task.Delay(1000)
Loop
Run Code Online (Sandbox Code Playgroud)
然后我打电话给TransformBlock.Complete他们所有人.但在这种情况下,仍然可以有最后的URL加载它TransformBlock.如果最后一个URL未成功加载,它将变为"丢失",因为TransformBlocks都不会将其取回.这就是为什么我想知道TransformBlocks是否还在运行.抱歉,我的英语不好.

即使您可以找出某个区块是否正在处理某个项目,它也无法帮助您实现目标.那是因为您需要在完全相同的时刻检查所有块的状态,并且没有办法做到这一点.
我认为您需要的是以某种方式手动跟踪已完全处理的项目数量,并将其与要处理的项目总数进行比较.
您应该知道从一开始就要处理的项目数(这是您将它们发送到缓冲区块的人).要跟踪已完全处理的项目数,可以向解析操作块添加计数器(不要忘记使计数器线程安全,因为您的操作块是并行的).
然后,如果计数器达到要处理的项目总数,您就知道所有工作都已完成.
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |