Я пытаюсь создать объект, который может выполнять некоторые задачи последовательно в своем собственном потоке, как будто это очередь.
Следующий пример только для демонстрации моей настройки и может быть совершенно неверным.
class CoroutinesTest {
fun a() {
GlobalScope.launch {
println("a started")
delay(1000)
println("a completed")
}
}
fun b() {
GlobalScope.launch {
println("b started")
delay(2000)
println("b completed")
}
}
fun complex() {
a()
b()
}
}
fun main() {
runBlocking {
val coroutinesTest = CoroutinesTest()
coroutinesTest.complex()
delay(10000)
}
}
На данный момент этот код печатает следующее
a started
b started
a completed
b completed
, что означает a
и b
выполняются параллельно.Методы a
, b
и complex
могут вызываться из разных потоков.Конечно, метод complex
также должен поддерживать эту концепцию.На данный момент мне нужен механизм, который позволяет мне выполнять только одну задачу за раз, поэтому я мог получить следующий вывод:
a started
a completed
b started
b completed
Я провел некоторое исследование и думаю, что actor
с Channel
может делать то, что нужно, но actor
на данный момент помечено как устарело ( проблема # 87 ).Мне не нравится идея использования API, который может быть изменен, поэтому я хотел бы сделать это обычным способом.