Kotlin Coroutine - 是否有默认超时
Kotlin Coroutine - is there a default timeout
我正在尝试访问服务器,但有时速度很慢。我正在使用的 ktor 客户端因 Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException: Timed out waiting for 15000 ms
而崩溃,即使我从未指定任何限制。是否集成了默认超时?
最小示例:
main.kt
import io.ktor.client.engine.cio.*
import io.ktor.client.features.*
import io.ktor.client.request.*
suspend fun main() {
val client = HttpClient(CIO) {
install(HttpTimeout) {
requestTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
connectTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
socketTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
}
}
val foo = client.get<String>("http://slowwly.robertomurray.co.uk/delay/20000/url/http://www.google.co.uk")
println(foo)
}
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.4.10"
application
}
group = "me.oehmj"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
val ktor_version: String by project
val kotlin_serialization_version: String by project
val kotlin_coroutines_version: String by project
dependencies {
implementation("io.ktor:ktor-client-cio:$ktor_version")
implementation("io.ktor:ktor-client-auth-jvm:$ktor_version")
implementation("io.ktor:ktor-client-logging-jvm:$ktor_version")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version")
}
tasks.withType<KotlinCompile>() {
kotlinOptions.jvmTarget = "1.8"
}
application {
mainClassName = "MainKt"
}
gradle.properties
kotlin.code.style=official
ktor_version=1.4.2
kotlin_coroutines_version=1.4.1
Ktor-HttpTimeout-Module 似乎没有效果。
关于如何延长超时时间有什么建议吗?
查看 documentation 你应该这样做:
val client = HttpClient(CIO) {
engine {
requestTimeout = 0 // 0 to disable, or a millisecond value to fit your needs
}
}
默认值为 15 秒。
您可以阅读有关 ktor 引擎的更多信息here
我正在尝试访问服务器,但有时速度很慢。我正在使用的 ktor 客户端因 Exception in thread "main" kotlinx.coroutines.TimeoutCancellationException: Timed out waiting for 15000 ms
而崩溃,即使我从未指定任何限制。是否集成了默认超时?
最小示例:
main.kt
import io.ktor.client.engine.cio.*
import io.ktor.client.features.*
import io.ktor.client.request.*
suspend fun main() {
val client = HttpClient(CIO) {
install(HttpTimeout) {
requestTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
connectTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
socketTimeoutMillis = HttpTimeout.INFINITE_TIMEOUT_MS
}
}
val foo = client.get<String>("http://slowwly.robertomurray.co.uk/delay/20000/url/http://www.google.co.uk")
println(foo)
}
build.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.4.10"
application
}
group = "me.oehmj"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
val ktor_version: String by project
val kotlin_serialization_version: String by project
val kotlin_coroutines_version: String by project
dependencies {
implementation("io.ktor:ktor-client-cio:$ktor_version")
implementation("io.ktor:ktor-client-auth-jvm:$ktor_version")
implementation("io.ktor:ktor-client-logging-jvm:$ktor_version")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlin_coroutines_version")
}
tasks.withType<KotlinCompile>() {
kotlinOptions.jvmTarget = "1.8"
}
application {
mainClassName = "MainKt"
}
gradle.properties
kotlin.code.style=official
ktor_version=1.4.2
kotlin_coroutines_version=1.4.1
Ktor-HttpTimeout-Module 似乎没有效果。 关于如何延长超时时间有什么建议吗?
查看 documentation 你应该这样做:
val client = HttpClient(CIO) {
engine {
requestTimeout = 0 // 0 to disable, or a millisecond value to fit your needs
}
}
默认值为 15 秒。
您可以阅读有关 ktor 引擎的更多信息here