Der TPL-Datenflussblock verfügt über die Eigenschaften .InputCount
und .OutputCount
. Aber es kann jetzt die Ausführung über einen Gegenstand ausführen, und es gibt keine Eigenschaft wie .Busy [Boolean]
. Also gibt es eine Möglichkeit zu wissen, ob Block jetzt funktioniert und einer der Items noch da ist?Wissen Sie, ob TPL Dataflow Block ausgelastet ist?
UPDATE:
Lassen Sie mich meine Frage erläutern. Hier ist mein aktuelles Dataflow-Netzwerkschema. enthält URLs zum Laden, Nummer TransformBlock
s Seiten über Proxy-Server laden und ActionBlock
am Ende führt die Arbeit mit geladenen Seiten. TransformBlock
s hat .BoundedCapacity
vordefiniert, also wartet auf irgendeinen von TransformBlocks
wird frei und Posten dann in es.
Zunächst poste ich alle URLs auf Buffer Block
. Wenn eine der TransformBlock
s Ausnahmen beim Laden von HTML auslöst, wird die URL zurück an gesendet. Mein Ziel ist es irgendwie zu warten, bis alle meine URLs garantiert geladen und geparst sind. Denn jetzt wie folgt ich warte:
Do While _BufferBlock.Count > 0 Or _
GetLoadBlocksTotalInputOutputCount(_TransformBlocks) > 0 Or _
_ActionBlock.InputCount > 0
Await Task.Delay(1000)
Loop
Dann rufe ich TransformBlock.Complete
auf allen von ihnen. Aber in diesem Fall kann es immer noch die letzten URLs sein, die es laden TransformBlock
s. Wenn die letzte URL nicht erfolgreich geladen wurde, wird sie "verloren", weil sie von keinem von TransformBlocks zurückgenommen wurde. Deshalb möchte ich wissen, ob TransformBlock
s noch in Betrieb sind. Entschuldigung für mein schlechtes Englisch.
Wenn inputCount nicht Null ist und der Block nicht abgebrochen wird. Warum wäre es nicht beschäftigt? – i3arnon
Warum möchten Sie das wissen? – svick
@svick, bitte sehen Sie update. – AsValeO