未解决的参考:1.3 中 Kotlin 中的异步
Unresolved reference: async in Kotlin in 1.3
我在 github here.
中有多模块 kotlin gradle 项目
我的一个子项目 introducing-coroutines with build file build.gradle.kts 文件是 here
build.gradle.kts的内容是-
import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
java
kotlin("jvm") version "1.3.11"
}
group = "chapter2"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
compile(kotlin("stdlib-jdk8"))
compile("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0")
testCompile("junit", "junit", "4.12")
}
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
kotlin {
experimental {
coroutines = Coroutines.ENABLE
}
}
我正在尝试从这个 link 创建我的第一个协程程序。
import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlin.system.*
import kotlin.system.measureTimeMillis
suspend fun computecr(array: IntArray, low: Int, high: Int): Long {
return if (high - low <= SEQUENTIAL_THRESHOLD) {
(low until high)
.map { array[it].toLong() }
.sum()
} else {
val mid = low + (high - low) / 2
val left = async { computecr(array, low, mid) }
val right = compute(array, mid, high)
return left.await() + right
}
}
当我编译程序时出现以下错误 -
e: /Users/rajkumar.natarajan/Documents/Coding/coroutines-demo/introducing-coroutines/src/main/kotlin/SumUsingCoroutines.kt: (15, 20): Unresolved reference: async
> Task :introducing-coroutines:compileKotlin FAILED
FAILURE: Build failed with an exception.
我可以毫无问题地导入 import kotlinx.coroutines.async
,但不确定为什么会出现此错误。
我已经验证过类似问题 and added anko-commons
dependency here
我该如何解决这个错误?
问题在于async
(与launch
相同)被定义为CoroutineScope
上的扩展函数。在以下示例中,它在 withContext
的接收器 CoroutineScope
中被调用:
suspend fun computecr(array: IntArray, low: Int, high: Int): Long {
return if (high - low <= SEQUENTIAL_THRESHOLD) {
(low until high)
.map { array[it].toLong() }
.sum()
} else {
withContext(Default) {
val mid = low + (high - low) / 2
val left = async { computecr(array, low, mid) }
val right = computecr(array, mid, high)
left.await() + right
}
}
}
首先,您必须从 Gradle 中删除启用实验协程功能的部分。
kotlin {
experimental {
coroutines = Coroutines.ENABLE
}
}
您不能再隐式使用 async()
函数。您必须为全局范围协程 GlobalScope.async(){...}
显式调用它,或者您可以使用 CoroutineScope(...).async{...}
从另一个协程范围或从作用域函数 coroutineScope {...}
、withContext(...){...}
.[=17 调用它=]
我写了一个 example 供个人使用,以了解协程是如何工作的。我希望它是好的和有帮助的。
你可以试试这个:
CoroutineScope(Dispatchers.Default).async {
...
}
我在 github here.
中有多模块 kotlin gradle 项目我的一个子项目 introducing-coroutines with build file build.gradle.kts 文件是 here
build.gradle.kts的内容是-
import org.jetbrains.kotlin.gradle.dsl.Coroutines
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
java
kotlin("jvm") version "1.3.11"
}
group = "chapter2"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
compile(kotlin("stdlib-jdk8"))
compile("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.0")
testCompile("junit", "junit", "4.12")
}
configure<JavaPluginConvention> {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
kotlin {
experimental {
coroutines = Coroutines.ENABLE
}
}
我正在尝试从这个 link 创建我的第一个协程程序。
import kotlinx.coroutines.*
import kotlinx.coroutines.async
import kotlin.system.*
import kotlin.system.measureTimeMillis
suspend fun computecr(array: IntArray, low: Int, high: Int): Long {
return if (high - low <= SEQUENTIAL_THRESHOLD) {
(low until high)
.map { array[it].toLong() }
.sum()
} else {
val mid = low + (high - low) / 2
val left = async { computecr(array, low, mid) }
val right = compute(array, mid, high)
return left.await() + right
}
}
当我编译程序时出现以下错误 -
e: /Users/rajkumar.natarajan/Documents/Coding/coroutines-demo/introducing-coroutines/src/main/kotlin/SumUsingCoroutines.kt: (15, 20): Unresolved reference: async
> Task :introducing-coroutines:compileKotlin FAILED
FAILURE: Build failed with an exception.
我可以毫无问题地导入 import kotlinx.coroutines.async
,但不确定为什么会出现此错误。
我已经验证过类似问题anko-commons
dependency here
我该如何解决这个错误?
问题在于async
(与launch
相同)被定义为CoroutineScope
上的扩展函数。在以下示例中,它在 withContext
的接收器 CoroutineScope
中被调用:
suspend fun computecr(array: IntArray, low: Int, high: Int): Long {
return if (high - low <= SEQUENTIAL_THRESHOLD) {
(low until high)
.map { array[it].toLong() }
.sum()
} else {
withContext(Default) {
val mid = low + (high - low) / 2
val left = async { computecr(array, low, mid) }
val right = computecr(array, mid, high)
left.await() + right
}
}
}
首先,您必须从 Gradle 中删除启用实验协程功能的部分。
kotlin {
experimental {
coroutines = Coroutines.ENABLE
}
}
您不能再隐式使用 async()
函数。您必须为全局范围协程 GlobalScope.async(){...}
显式调用它,或者您可以使用 CoroutineScope(...).async{...}
从另一个协程范围或从作用域函数 coroutineScope {...}
、withContext(...){...}
.[=17 调用它=]
我写了一个 example 供个人使用,以了解协程是如何工作的。我希望它是好的和有帮助的。
你可以试试这个:
CoroutineScope(Dispatchers.Default).async {
...
}