Il blocco TPL Dataflow ha .InputCount
e .OutputCount
proprietà. Ma ora può eseguire l'esecuzione su un oggetto e non ci sono proprietà come .Busy [Boolean]
. Quindi c'è un modo per sapere se il blocco è ora operativo e uno degli oggetti è ancora lì?Modo per sapere se TPL Dataflow Block è occupato?
UPDATE:
Mi spiego il mio problema. Qui su pic è il mio attuale schema di rete Dataflow. BufferBlock
contiene gli URL da caricare, il numero di pagine di caricamento di TransformBlock
s tramite server proxy e ActionBlock
alla fine esegue il lavoro con le pagine caricate. TransformBlock
s ha predefinito .BoundedCapacity
, quindi BufferBlock
attende uno qualsiasi di TransformBlocks
diventa gratuito e quindi inserisce l'elemento in esso.
Inizialmente inserisco tutti gli URL su Buffer Block
. Inoltre, se uno dei TransformBlock
s genera un'eccezione durante il caricamento di HTML, restituisce l'URL di nuovo a BufferBlock
. Quindi il mio obiettivo è in qualche modo aspettare finché tutti i miei URL non sono stati caricati e analizzati. Per ora sto aspettando in questo modo:
Do While _BufferBlock.Count > 0 Or _
GetLoadBlocksTotalInputOutputCount(_TransformBlocks) > 0 Or _
_ActionBlock.InputCount > 0
Await Task.Delay(1000)
Loop
Poi chiamo TransformBlock.Complete
su ognuna di esse. Ma in questo caso, ci possono ancora essere gli ultimi URL caricandolo TransformBlock
s. Se l'ultimo URL non è stato caricato con successo, diventa "perso", perché nessuno dei TransformBlocks non lo riprende. Ecco perché voglio sapere se TransformBlock
s sono ancora in funzione. Scusate il mio pessimo inglese.
Se inputCount non è zero e il blocco non viene annullato. perché non dovrebbe essere occupato? – i3arnon
Perché vorresti saperlo? – svick
@svick, per favore guarda l'aggiornamento. – AsValeO