我在运行程序时收到此消息。 我该如何纠正该错误? 我在留言中用评论标记了那条线! 信息: 线程“主”中的异常java.lang.RuntimeException:无法编译的源代码-错误的符号类型:login.Login.frame(Login.java:52)上的login. ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试运行以下代码,但未运行,因为编译器不知道要调用哪个版本的async
方法。 我如何告诉该打给谁?
v
ar counter=0
val workerA=asyncIncrement(5000)
val workerB=asyncIncrement(100)
workerA.await()
workerB.await()
print("counter = $counter")
fun asyncIncrement(by:Int)=async{
for(i in 1..by){
counter++
}
}
只需将代码复制并粘贴到暂存文件中或任何地方,您应该会看到相同的编译器错误
从Kotlin 1.3开始,您需要在示波器上调用async
。 在此示例中,我选择了GlobalScope
。 但是,选择哪个范围都没有关系,您始终必须显式导入async
扩展功能。
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.async
import kotlinx.coroutines.runBlocking
import java.util.concurrent.atomic.AtomicInteger
fun main(args: Array<String>) {
val counter=AtomicInteger(0)
fun asyncIncrement(by:Int)= GlobalScope.async{
for(i in 1..by){
counter.incrementAndGet()
}
}
val workerA=asyncIncrement(5000)
val workerB=asyncIncrement(100)
runBlocking {
workerA.await()
workerB.await()
}
print("counter = $counter")
}
顺便说一句:我将变量counter
从int
更改为AtomicInteger
因为两个async
块可能在不同的线程中运行。 我介绍了runBlocking
,因为await
必须在suspend函数中运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.