gpt4 book ai didi

c# - Unity (C#) -> Kotlin <- 协程

转载 作者:太空狗 更新时间:2023-10-30 00:30:08 27 4
gpt4 key购买 nike

我是第一次尝试使用 Kotlin,并且想使用协程。

下面的代码所做的是暂停当前函数的执行,而不休眠正在执行的线程。暂停基于提供的时间量。该函数通过使用 C# 语言中的协程支持来工作。 (这种支持最近也被添加到 Kotlin 中!)

Unity 示例

void Start() 
{
print("Starting " + Time.time);
StartCoroutine(WaitAndPrint(2.0F));
print("Before WaitAndPrint Finishes " + Time.time);
}

IEnumerator WaitAndPrint(float waitTime)
{
yield return new WaitForSeconds(waitTime);
print("WaitAndPrint " + Time.time);
}

我一直无法弄清楚如何在 Kotlin 中做类似的事情。有人可以帮助指导我正确的方向吗?

最佳答案

请记住,协程是 Kotlin 1.1 的一部分,它仍处于 EAP(早期访问预览)中。虽然我个人取得了巨大的成功,但 API 还不稳定,您不应该依赖它在生产中工作。此外,这个答案可能会在 Kotlin 1.1 最终确定时变得过时。

  1. 如果您还没有,请按照 this blog post 底部的说明将您的项目和 IDE 升级到最新的 Kotlin 1.1 EAP 里程碑(在撰写本文时为 M04)。 .
  2. 查找或编写一个函数来执行您想要的操作。


private val executor = Executors.newSingleThreadScheduledExecutor {
Thread(it, "sleep-thread").apply { isDaemon = true }
}

suspend fun sleep(millis: Long): Unit = suspendCoroutine { c ->
executor.schedule({ c.resume(Unit) }, millis, TimeUnit.MILLISECONDS)
}

有一些重要的注意事项需要注意。与 .NET 相比,所有可挂起的方法都将由某处的某个共享中央池处理(老实说,我什至不确定在哪里),上面链接/显示的示例 sleep 方法将在执行程序池中运行所有继续工作你指定。上面链接的示例 sleep 方法使用单线程,这意味着 sleep 之后发生的所有工作都将由单线程处理。这可能不足以满足您的用例。

如果您对 Kotlin 协程的详细信息有其他疑问,我强烈建议您加入 kotlinlang slack 中的#coroutines channel 。参见 here有关加入的详细信息。

关于c# - Unity (C#) -> Kotlin <- 协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520343/

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