внутри у себя держит несколько корутин. Что-то вроде бесконечного while с обработкой входящих запросов.
По-идее я мог бы использовать launch, actor, produce исходя из нужд. Но этот класс Foo несколько сложнее.
Возникает вопрос как его инициализировать в определенном CoroutineScope чтобы работало Structured Concurrency.
Как лучше:
1. Видел в офф. документации такой подход. Но возникает вопрос, будет ли работать Structured Concurrency здесь?
class Foo() : CoroutineScope by Dispatchers.Default
2. Можно передаять явно scope. Но это выглядит странно, ведь он обычно передается неявно через Continuation в suspended функциях
class Foo(val scope): CoroutineScope by scope
3. Можно скрыть конструктор и сделать в компаньоне fun CoroutineScope.create() = Foo(this)
Но хотелось бы чего-нибудь такого:
suspended fun bar() = coroutineScope {
val f = Foo()
}
или я что-то не так делаю 🤔
Если этот класс можно назвать scope со своим жизненным циклом (похоже на то), тогда вариант 1 - он должен реализовывать CoroutineScope
Обсуждают сегодня