Ответ
Да, может. В Kotlin Channel поддерживает несколько подписчиков, но поведение зависит от типа канала:
- Rendezvous (по умолчанию) и Buffered — каждый элемент получает только один подписчик (конкурентный доступ).
- BroadcastChannel (устарел, вместо него
SharedFlow) — поддерживает несколько подписчиков, каждый получит все элементы.
Пример с SharedFlow (рекомендуемый подход):
val sharedFlow = MutableSharedFlow<Int>()
// Подписчик 1
sharedFlow.onEach { println("Sub1: $it") }.launchIn(scope)
// Подписчик 2
sharedFlow.onEach { println("Sub2: $it") }.launchIn(scope)
sharedFlow.emit(1) // Оба подписчика получат 1
Используйте SharedFlow для мультиподписки вместо Channel.