我正在阅读Kotlin Coroutine并且知道它是基于suspend
函数的。但是suspend
是什么意思呢?
Coroutine或函数挂起?
摘自https://kotlinlang.org/docs/reference/coroutines.html
哪一个被停职了?
摘自https://kotlinlang.org/docs/reference/coroutines.html
为了继续类比,await()可以是一个挂起函数(因此也可以从async{}块中调用),它挂起一个协程,直到完成某些计算并返回其结果:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
fun computation(): Deferred<Boolean> {
return async {
true
}
}
当coroutine等待时,线程返回到池中,并且当等待完成时,coroutine在池中的空闲线程上恢复
挂起功能是一切关系的中心。挂起函数只是一个可以暂停并在以后恢复的函数。它们可以执行一个长时间运行的操作,并等待它完成而不阻塞。
除了添加suspend
关键字外,挂起函数的语法与常规函数类似。它可以接受一个参数并具有一个返回类型。但是,挂起函数只能由另一个挂起函数调用或在一个协同序列中调用。
suspend fun backgroundTask(param: Int): Int {
// long running operation
}
在此情况下,编译器将挂起函数转换为另一个没有挂起关键字的函数,该函数采用continuation
类型的附加参数。例如,上面的函数将被编译器转换为:
fun backgroundTask(param: Int, callback: Continuation<Int>): Int {
// long running operation
}
interface Continuation<in T> {
val context: CoroutineContext
fun resume(value: T)
fun resumeWithException(exception: Throwable)
}
我正在尝试理解kotlin协程,我来自C#,在kotlin中有一些我不理解的地方。在这种情况下,我正在使用Qukus框架中的静态编程语言编写一个webapi。从我可以看出,如果我将控制器(或资源)函数标记为挂起函数,Qukus将自动在协程中启动它。 我的问题是,我不知道挂起该协程的首选方法是什么。我在kotlin协程上看到的绝大多数示例都使用delay()函数,该函数在内部使用suspendCan
我正在尝试从 Java 7 调用科特林函数。我正在使用协程,这个被调用的函数正在挂起,例如: 我在版本 0.25.3 中使用了协程,我可以通过传递继续来模拟简单的 Java 回调样式 ,但是我使用的是Android,这意味着只使用Java 7。另一方面,简单的< code>Future太愚蠢了,因为我不想定期检查函数是否完成——我只想在函数完成时被调用。我真的希望避免添加新的库或许多额外的类/方法
这是一个标准的Kotlin函数(据我所知) 但我不认为它在任何地方解释什么。()意思是...
在这里做什么,它是否将这个函数附加到其他函数?
我正在用Node和Cheerio构建一个网络刮刀,对于某个网站,我得到了以下错误(它只发生在这一个网站上,没有其他我试图刮掉的网站)。 它每次都发生在不同的位置,因此有时抛出错误的是,而其他时间则没有问题,它是一个完全不同的url: 这是非常棘手的调试,我真的不知道从哪里开始。首先,什么是套接字挂起错误?这是404错误还是类似的错误?或者这仅仅意味着服务器拒绝了连接? 我在任何地方都找不到解释!
问题内容: 我最近在查看Python 3.3语法规范时发现了一些有趣的东西: 在Python 2中缺少可选的“箭头”块,并且在Python 3中找不到有关其含义的任何信息。事实证明这是正确的Python,并已被解释器接受: 我认为这可能是某种前提语法,但是: 我无法x在此处进行测试,因为它仍未定义, 无论我在箭头(例如2 < 1)后面加上什么,它都不会影响功能行为。 熟悉此语法的任何人都可以解释吗