Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么;重复;函数在kotlin中是可取消的 fun main(args:Array)=运行阻塞{ val作业=启动{ 重复(1000){i-> println(“我睡了$I…”) 延迟(500L) } } 延迟(1300L)//延迟一点 println(“梅因:我等烦了!”) job.cancel()//取消作业 job.join()//等待作业完成 println(“main:现在我可以退出了。”)_Kotlin - Fatal编程技术网

为什么;重复;函数在kotlin中是可取消的 fun main(args:Array)=运行阻塞{ val作业=启动{ 重复(1000){i-> println(“我睡了$I…”) 延迟(500L) } } 延迟(1300L)//延迟一点 println(“梅因:我等烦了!”) job.cancel()//取消作业 job.join()//等待作业完成 println(“main:现在我可以退出了。”)

为什么;重复;函数在kotlin中是可取消的 fun main(args:Array)=运行阻塞{ val作业=启动{ 重复(1000){i-> println(“我睡了$I…”) 延迟(500L) } } 延迟(1300L)//延迟一点 println(“梅因:我等烦了!”) job.cancel()//取消作业 job.join()//等待作业完成 println(“main:现在我可以退出了。”),kotlin,Kotlin,} 此代码未选中“激活”或“使用挂起功能”,但可以取消,因为delay()是挂起功能 Thread.sleep()不是挂起函数。 如果将delay(500L)替换为Thread.sleep(500),则它将无法按时取消。,因为delay()是一个挂起函数 Thread.sleep()不是挂起函数。 如果用线程睡眠(500)替换延迟(500L),那么它将无法按时取消。以下是Java线程的类比: 1) 明确检查中断标志: fun main(args: Array<String>) = r

} 此代码未选中“激活”或“使用挂起功能”,但可以取消,因为
delay()
是挂起功能

Thread.sleep()
不是挂起函数。 如果将
delay(500L)
替换为
Thread.sleep(500)
,则它将无法按时取消。

,因为
delay()
是一个挂起函数

Thread.sleep()
不是挂起函数。
如果用
线程睡眠(500)
替换
延迟(500L)
,那么它将无法按时取消。

以下是Java线程的类比:

1) 明确检查中断标志:

fun main(args: Array<String>) = runBlocking<Unit> {
val job = launch {
    repeat(1000) { i ->
        println("I'm sleeping $i ...")
        delay(500L)
    }
}
delay(1300L) // delay a bit
println("main: I'm tired of waiting!")
job.cancel() // cancels the job
job.join() // waits for job's completion 
println("main: Now I can quit.")
2) 调用可中断操作:

while (!Thread.interrupted()) {
    // loop code
}
在这两种情况下,线程都将响应提升的中断标志

在协同程序中,
delay()
Thread.sleep()
的对应项,
isActive
标志是
Thread.interrupted
标志的对应项

所以你写的时候,

while (true) {
    Thread.sleep(1);
    // loop code
}

协同程序将被安排在线程外,当其恢复时间到来时,在
continuation.resume()调用中,它将首先检查
isActive
标志。如果引发,它将抛出一个
CancellationException

以下是与Java线程的类比:

1) 明确检查中断标志:

fun main(args: Array<String>) = runBlocking<Unit> {
val job = launch {
    repeat(1000) { i ->
        println("I'm sleeping $i ...")
        delay(500L)
    }
}
delay(1300L) // delay a bit
println("main: I'm tired of waiting!")
job.cancel() // cancels the job
job.join() // waits for job's completion 
println("main: Now I can quit.")
2) 调用可中断操作:

while (!Thread.interrupted()) {
    // loop code
}
在这两种情况下,线程都将响应提升的中断标志

在协同程序中,
delay()
Thread.sleep()
的对应项,
isActive
标志是
Thread.interrupted
标志的对应项

所以你写的时候,

while (true) {
    Thread.sleep(1);
    // loop code
}
协同程序将被安排在线程外,当其恢复时间到来时,在
continuation.resume()调用中,它将首先检查
isActive
标志。如果引发,它将抛出一个
CancellationException