如何使用 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/