问题描述
我有一批,可以用同步方法做一些工作。这可能需要一些时间。为了优化,我想创建异步方法,该方法将一次并行执行 10 个批次。在 Kotlin 中可以吗?
解决方法
这完全取决于你的任务类型,你想执行多个 CPU 反弹的长时间运行的任务,那么你应该选择 ExecutorService。另一方面,如果您想执行多个不占用大量 CPU 的异步调用,那么您可以查看 kotliln coroutines
举个例子,当首先使用corotuines时,你需要定义你的任务,假设你有一个挂起函数,如下
suspend fun myTask(param: SomeParam)
现在你想开始并行执行 10 个任务,然后你做
runBlocking { // start a coroutine it is like a thread,but very lightweight
launch(Dispatcher.Default){ myTask(param) } // launch individual coroutine for every parallel task
launch(Dispatcher.Default){ myTask(someOtherParam) }
...
launch(Dispatcher.Default){ myTask(yetAnotherParam) }
// Choose appropriate dispatcher (Main,IO or Default)
}
launch
是一个协程构建器,它在不阻塞调用线程的情况下启动一个协程。如果你想返回一些结果,你也可以使用 async。
有很多可用的选项,我建议您查看Coroutines guide