gpt4 book ai didi

ios - withTimeout 函数给出 IllegalStateException : There is no event loop. 使用 runBlocking { ... } 启动一个。在 Kotlin 多平台 iOS 客户端中

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

更新:如果我首先执行一个没有超时的协程,然后执行 withTimeout,它就会起作用。但是如果我先执行 withTimeout 协程,那么它会给我一个错误。异步也是如此。

我正在创建一个演示 kotlin 多平台应用程序,在其中使用 ktor 执行 API 调用。我希望在 ktor 请求上有一个可配置的超时函数,因此我在协程级别使用 withTimeout。

这是我使用网络 API 进行的函数调用。

suspend fun <T> onNetworkWithTimeOut(
url: String,
timeoutInMillis: Long,
block: suspend CoroutineScope.() -> Any): T {
return withTimeout(timeoutInMillis) {
withContext(dispatchers.io, block)
} as T
}

suspend fun <T> onNetworkWithoutTimeOut(url: String, block: suspend CoroutineScope.() -> Any): T {
return withContext(dispatchers.io, block) as T
}

这是我的 iOSMain 模块的 AppDispatcher 类。

@InternalCoroutinesApi
actual class AppDispatchersImpl : AppDispatchers {
@SharedImmutable
override val main: CoroutineDispatcher =
NsQueueDispatcher(dispatch_get_main_queue())

@SharedImmutable
override val io: CoroutineDispatcher =
NsQueueDispatcher(dispatch_get_main_queue())

internal class NsQueueDispatcher(
@SharedImmutable private val dispatchQueue: dispatch_queue_t
) : CoroutineDispatcher() {
override fun dispatch(context: CoroutineContext, block: Runnable) {
NSRunLoop.mainRunLoop().performBlock {
block.run()
}
}
}

}

因此,带有超时的函数在 iOS 客户端中给出了以下错误。

kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one.

我正在使用 kotlin-coroutine-native 的 1.3.2-native-mt-1 版本。我在以下 URL 创建了一个示例演示应用程序。 https://github.com/dudhatparesh/kotlin-multiplat-platform-example

最佳答案

因此,正如上面评论中提到的,我遇到了类似的问题,但事实证明,由于其他库中的传递依赖性,它没有选择 native-mt 版本。添加了以下内容,现在正在解决。

        implementation('org.jetbrains.kotlinx:kotlinx-coroutines-core-native') 
{
version {
strictly '1.3.3-native-mt'
}
}

另请注意 https://github.com/Kotlin/kotlinx.coroutines/blob/native-mt/kotlin-native-sharing.md 中的指导

开始在 https://github.com/joreilly/PeopleInSpace 中使用它

关于ios - withTimeout 函数给出 IllegalStateException : There is no event loop. 使用 runBlocking { ... } 启动一个。在 Kotlin 多平台 iOS 客户端中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59370764/

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