![](/img/trans.png)
[英]IntelliJ Project "JS Client and JVM Server | Gradle" does not work
[英]Kotlin withTimeout does not work in Intellij gradle project
運行以下代碼給我錯誤的結果:
代碼
import kotlinx.coroutines.*
fun timeElapsed(nano: Long, msg: String){
println("$msg milliseconds: ${(System.nanoTime()-nano)/1000000}")
}
suspend fun main(): Unit = coroutineScope {
val start = System.nanoTime()
withTimeout(700) {
println("in timout")
timeElapsed(start, "timeout before delay")
delay(900)
println("not show?")
}
}
錯誤的結果
in timout
timeout before delay milliseconds: 16
not show?
Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException: Timed out waiting for 700 ms
在https://play.kotlinlang.org/上運行給我預期的結果:
in timout
timeout before delay milliseconds: 27
Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException: Timed out waiting for 700 ms
我的 gradle 設置
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.6.21'
id 'org.jetbrains.kotlin.plugin.serialization' version '1.6.21'
}
group 'intro-coroutines'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib"
implementation "org.jetbrains.kotlin:kotlin-reflect"
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2")
def coroutines_version = '1.6.1'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-debug:$coroutines_version"
Intellij 版本:Build #IU-221.5080.210,於 2022 年 4 月 11 日構建
kotline 插件版本:221-1.7.0-Beta-release-135-IJ5080.210
Java SDK:JavaSE-1.8
go 可能有什么問題?
最后,我弄清楚了原因,完全是我的錯:
我在同一個 package 的另一個 Kotlin 文件中定義了一個 delay() function 如下:
suspend fun delay(timeMillis: Long): Unit =
suspendCoroutine { cont ->
executor.schedule({
cont.resume(Unit)
}, timeMillis, TimeUnit.MILLISECONDS)
}
由於此延續是不可取消的,因此延遲不可取消,對不起:吸取教訓,function 應該是私有的,並檢查導入!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.