gpt4 book ai didi

android - 如何同步协程?

转载 作者:行者123 更新时间:2023-12-02 12:02:18 26 4
gpt4 key购买 nike

我试图确保这两种方法是同步的。我注意到协程比线程更难同步。如果我调用start(),我如何保证?然后 stop()我的代码实际上会在最后停止吗?

object Test {

private val coroutine = CoroutineScope(Dispatchers.IO)

@Synchronized
fun start() {
coroutine.launch {
// some work
}
}

@Synchronized
fun stop() {
coroutine.launch {
// clean up then stop
}
}
}

我担心的是我调用 start()然后 stop()但实际上 stop 先执行。所以我的代码在它应该停止的时候继续。

最佳答案

命令的同步或顺序执行是两件不同的事情。
如果您需要执行“开始”然后“停止”,只需不要使用您的“coroutine.launch”创建新的协程,而是为您的函数使用暂停关键字,然后像这样执行它们:

suspend fun start() {}

suspend fun stop() {}

fun main() {
scope.launch {
start()
stop()
}
}
但是如果你想同步两种方法,你可以阅读 an official Kotlin guide to shared mutable state这提出了一些很好的解决方案。并做一些这样的想法:
val mutex = Mutex()

suspend fun main() {
mutex.withLock {
start()
stop()
}
}

关于android - 如何同步协程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59998741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com