异步工作,但得到未解决的参考等待

我有以下代码。

我无法理解为什么会发生这种情况。 我没有发现有关这个的现有答案。 我试图直接在tenny和twy分配的地方等待,但这也行不通。

我不认为依赖关系有问题,因为aysnc的作品。 我也发布了我的build.gradle文件。

import kotlinx.coroutines.experimental.async fun main(args: Array) { async{ val tenny = star_ten(1) val twy =star_two(10) println() println(twy.await()+tenny.await()) println() } } fun star_two(num:Int):Int{ return num * 2 } fun star_ten(num:Int):Int{ return num * 10 } 

我的build.gradle是

 group 'org.nul.cool' version '1.0-SNAPSHOT' buildscript { ext.kotlin_version = '1.1.60' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } apply plugin: 'java' apply plugin: 'kotlin' kotlin { experimental { coroutines 'enable' } } sourceCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version" testCompile group: 'junit', name: 'junit', version: '4.12' compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.19.2" } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" } 

因为你的star_twostar_ten函数返回Int ,所以你得到了一个await()的未解决的引用,所以tennytwyvariables只是Intawait()函数在Deferred上声明。 简而言之,在这些函数中你没有做任何异步的事情,所以没有什么可以等待的。

让这些函数异步行为的一种方法是将它们声明为挂起函数,并在异步块中分别调用它们。 像这样(未经测试)…

 async{ val tenny = async { star_ten(1) } //Should be Deferred val twy = async { star_two(10)} //Should be Deferred println(twy.await() + tenny.await()) } suspend fun star_two(num:Int): Int = num * 2 suspend fun star_ten(num:Int): Int = num * 10 

通过示例页面的kotlinx.coroutines指南有很多很好的例子,特别是这一节 。