2015-06-26 4 views
1

Я создаю довольно сложные графики потока данных TPL, и часто бывает, что где-то есть разрыв в графе. Симптомом этого является просто то, что приложение зависает, потому что некоторые блоки потока данных ждут сообщений.Есть ли способ обнаружить разрывы в графе потока данных TPL

Есть ли способ обнаружить, когда это произойдет, кроме ручной трассировки графика? Я вижу, что есть свойство LinkedTargets, доступное в отладочном представлении DataflowBlock - когда у меня есть разрыв, это значение равно 0. Однако, поскольку это не является общедоступным, поэтому я не могу написать что-то, чтобы автоматически проверять это.

ответ

2

Вы можете использовать Reflection. TPL Dataflow Debugger Visualizer использует отражение для извлечения связанных целей в DataFlowBlockDebugInfoRetriever.GetInnerDataFlowDebuggerInfo и создает список из nodes для каждого блока. Затем он создает структуру графика using QuickGraph.

Эта структура может быть визуализирована как визуализатор, или вы можете искать ее для разделов в коде. Quickgraph уже implements several algorithms, который может быть полезен.

Более простое решение, хотя, будет искать только для не ActionBlock блоков с 0 связанных целей

+0

Ну сказал Панос! –