如何使用 Kotlin-Multiplatform 运行 在 iOS 应用程序的后台线程中执行任务?
How to run a task in background thread on iOS app using Kotlin-Multiplatform?
我一直在尝试 运行 在 iOS 项目的后台线程上的 Kotlin-Multiplatform 库中执行任务 运行 遇到一些问题:
我尝试同时使用 Kotlin-Coroutines 和 GCD 的平台库,但只能在 iOS 的主线程中执行 运行 任务。每当我尝试向后台线程异步发送内容时,iOS 应用程序崩溃并出现以下错误:
"kotlin.native.IncorrectDereferenceException: 非法尝试从其他线程访问非共享 com.hp.jarvis.kmm.LogFile.$saveLog$lambda-0$FUNCTION_REFERENCE$9@155a948"
IncorrectDereferenceException
基本上是您尝试从后台线程访问全局状态的信号。
你可以玩:
@ThreadLocal
-> 为特定对象的每个线程制作副本
@SharedImmutable
-> 将冻结您的对象并使其可用于所有线程,请注意,如果您尝试更改冻结对象的值,您将得到 InvalidMutabilityException
我肯定会阅读此博客以了解当前的内存模型:https://touchlab.co/kotlin-native-concurrency/
我一直在尝试 运行 在 iOS 项目的后台线程上的 Kotlin-Multiplatform 库中执行任务 运行 遇到一些问题:
我尝试同时使用 Kotlin-Coroutines 和 GCD 的平台库,但只能在 iOS 的主线程中执行 运行 任务。每当我尝试向后台线程异步发送内容时,iOS 应用程序崩溃并出现以下错误:
"kotlin.native.IncorrectDereferenceException: 非法尝试从其他线程访问非共享 com.hp.jarvis.kmm.LogFile.$saveLog$lambda-0$FUNCTION_REFERENCE$9@155a948"
IncorrectDereferenceException
基本上是您尝试从后台线程访问全局状态的信号。
你可以玩:
@ThreadLocal
-> 为特定对象的每个线程制作副本@SharedImmutable
-> 将冻结您的对象并使其可用于所有线程,请注意,如果您尝试更改冻结对象的值,您将得到InvalidMutabilityException
我肯定会阅读此博客以了解当前的内存模型:https://touchlab.co/kotlin-native-concurrency/