我有一个命令行应用程序,可以执行一些异步任务:
return $this
->result($val)
->dollars()
->format('0,0.00')
我用gradle运行main方法,这里是配置:
class Main {
companion object {
@JvmStatic
fun main(args: Array<String>) {
GlobalScope.run {
launch {
FetchMovies().execute(7)
}
}
}
}
}
所以我运行它:apply plugin: 'application'
mainClassName = 'br.com.alessi.parser.main.Main'
// optional: add one string per argument you want as the default JVM args
applicationDefaultJvmArgs = ["-Xms512m", "-Xmx1g"]
当我运行它时,该程序无法执行异步执行。如何告诉我的程序等到FetchMovie()。execute()完成?
我尝试使用Thread.sleep(),但这当然有点不准确。
---编辑
从协程文档中,我可以这样做:
$ ./gradlew run
但是我不能在非暂停方法中调用job.join(),如果我将main暂停,则无法通过命令行运行。
答案 0 :(得分:1)
您是否尝试过使用runBlocking,如本示例中的协同程序文档所述。
import kotlinx.coroutines.*
fun main() = runBlocking { // this: CoroutineScope
launch { // launch new coroutine in the scope of runBlocking
delay(1000L)
println("World!")
}
println("Hello,")
}
这按以下build.gradle的说明进行工作
plugins {
id 'org.jetbrains.kotlin.jvm' version '1.3.11'
}
apply plugin: 'application'
mainClassName = "MainKt"
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0'
// implementation "io.reactivex.rxjava2:rxjava:2.2.5"
}
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}