生产者API无法解析

时间:2019-09-04 06:05:56

标签: kotlin kotlin-coroutines kotlinx.coroutines.channels

我正在学习Kotlin协程。我遵循了一个使用此代码的教程来解释协程的生产者消费者api:

import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.Channel
import kotlinx.coroutines.launch
import kotlinx.coroutines.channels.*

fun produceNumbers() : ProducerJob<Int> = produce {
    for (x in 1..5) {
         println("send $x")
         channel.send(x)
    }
}

我的 build.gradle

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.41'
}

group 'com.mm'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

我在Intellij IDE上尝试了代码。但是我经常收到编译器错误“无法解析的参考ProducerJob”和“无法解析的参考Produce”,为什么?

1 个答案:

答案 0 :(得分:0)

您需要一个CoroutineScope才能在其中运行produce。也许您正在遵循一个过时的教程。

import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.channels.produce

@ExperimentalCoroutinesApi
fun CoroutineScope.produceNumbers() = produce {
    for (x in 1..5) {
        println("send $x")
        send(x)
    }
}