Won*_*lus 4 c# coroutine unity-game-engine kotlin unityscript
我是第一次尝试Kotlin并希望得到一些帮助.
下面的代码是暂停执行当前函数而不休眠执行线程.暂停基于提供的时间量.该函数使用C#语言中的Coroutine支持.(这个支持最近也加入了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);
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何在Kotlin做类似的事情.有人可以帮我指导正确的方向吗?如果我在发布答案之前弄明白,我会更新我的帖子.
提前致谢!
请记住,协同程序是Kotlin 1.1的一部分,它仍处于EAP(早期访问预览版)中.虽然我个人取得了巨大成功,但API还不稳定,您不应该依赖它在生产中工作.此外,在Kotlin 1.1定稿时,这个答案很可能已经过时了.
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)
}
Run Code Online (Sandbox Code Playgroud)
有一些重要的警告需要注意.与.NET相比,某些共享中心池在某处可以处理所有可挂起的方法(我甚至不确定在哪里,说实话),上面链接/显示的示例sleep方法将在执行程序池中运行所有继续工作你指定.sleep
上面链接的示例方法使用单个线程,这意味着之后发生的所有工作sleep
将由单个线程处理.这可能不足以满足您的使用需求.
如果您对Kotlin协程的详细信息有其他疑问,我强烈建议您加入kotlinlang slack中的#coroutines频道.见这里关于加盟细节.