Как узнать количество элементов в канале <T>? - PullRequest
0 голосов
/ 21 февраля 2020

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

Я начал оборачивать Channel, ChannelReader и ChannelWriter в мои собственные классы, чтобы посчитать количество записей и чтений, но это похоже на взлом. Есть ли лучший способ?

1 Ответ

2 голосов
/ 21 февраля 2020

Используйте источник, Люк . Источник сообщает вам, что (а) не существует API publi c для этого, (б) вы можете использовать отражение, чтобы получить значение частного свойства ItemsCountForDebugger как для ограниченных, так и для неограниченных каналов, и (c ) это безопасно, несмотря на отсутствие блокировки в геттере. Конечно это взломать. Вопрос о том, является ли взломанный рефлекс лучше взломанного класса-обёртки - вопрос вкуса. API Publi c для получения приблизительного числа элементов в Channel<T> был запрошен еще в 2018 и будет добавлен в. NET Core 5.0 (планируется к выпуску в ноябре).

...