TPL Dataflow块有`.InputCount`和`.OutputCount`属性。但是它现在可以在项目上执行,而且没有像` .Busy [Boolean]`这样的属性。那么有没有办法知道块是否正在运行,并且其中一个项目仍然存在?
更新:
让我解释一下我的问题。这张图片显示了我当前的Dataflow网络方案。`BufferBlock`保存要加载的URL,`TransformBlock`的数量通过代理服务器加载页面,最后`ActionBlock`对加载的页面执行工作。`TransformBlock`具有预定义的`.BoundedCapacity`,因此`BufferBlock`等待任何一个`TransformBlocks`变为空闲状态,然后将项目发布到其中。
最初,我将所有URL发布到缓冲区块中。此外,如果`TransformBlock`中的任何一个在加载HTML期间抛出异常,则会将其URL返回到`BufferBlock`中。因此,我的目标是以某种方式等待直到所有URL都得到保证被加载和解析。到目前为止,我是这样等待的:
然后我对它们全部调用
更新:
让我解释一下我的问题。这张图片显示了我当前的Dataflow网络方案。`BufferBlock`保存要加载的URL,`TransformBlock`的数量通过代理服务器加载页面,最后`ActionBlock`对加载的页面执行工作。`TransformBlock`具有预定义的`.BoundedCapacity`,因此`BufferBlock`等待任何一个`TransformBlocks`变为空闲状态,然后将项目发布到其中。
最初,我将所有URL发布到缓冲区块中。此外,如果`TransformBlock`中的任何一个在加载HTML期间抛出异常,则会将其URL返回到`BufferBlock`中。因此,我的目标是以某种方式等待直到所有URL都得到保证被加载和解析。到目前为止,我是这样等待的:
Do While _BufferBlock.Count > 0 Or _
GetLoadBlocksTotalInputOutputCount(_TransformBlocks) > 0 Or _
_ActionBlock.InputCount > 0
Await Task.Delay(1000)
Loop
然后我对它们全部调用
TransformBlock.Complete
。但在这种情况下,仍可能会有一些最后的URL在加载TransformBlock
。如果最后一个URL没有成功加载,则它就会“丢失”,因为没有一个TransformBlocks
会将其重新获取回来。这就是为什么我想知道TransformBlock
是否仍在运行。抱歉我的英语不好。