我试着和kotlin的演员建设者一起玩。我编写了下面的代码来发送和接收来自参与者的消息。
package com.byteobject.prototype.kotlin
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.actor
import kotlinx.coroutines.channels.consumeEach
class GreetingsMessage(val to: String, val greetings: CompletableDeferred<String>)
fun Cor
在下面的代码中,运行两个异步:
import kotlinx.coroutines.*
import kotlin.system.*
fun main() = runBlocking<Unit> {
val time = measureTimeMillis {
val one = async { doSomethingUsefulOne() }
val two = async { doSomethingUsefulTwo() }
two.await()
one.await()
println(
在kotlin coroutines 中,它解释了“runBlocking和coroutineScope之间的区别”:
范围建设者
除了不同构建器提供的协同作用域之外,还可以使用coroutineScope构建器声明您自己的作用域。它创建了一个协同范围,直到所有启动的儿童都完成时才完成。The main difference between runBlocking and coroutineScope is that the latter does not block the current thread while waiting for all children to complete。
我用JUnit在Kotlin编写了一个用于异步测试的小型库,它基于带有runBlocking作用域的协同机制。我希望至少与Java有某种程度的互操作。我的协同知识是有限的,但我的想法是,如果我让Kotlin创建范围,并且只在Java类中桥接挂起函数调用,那么将Kotlin方法创建的延续传递给方法,它可能会工作。目前,我有类似的结构
class AsyncTestLibrary {
fun doSyncAction(){}
suspend fun doAsyncAction(){}
}
// JAVA compatibility wrapper
fun runTest(lib:
我正在用Kotlin开发一个android应用程序。在验证了输入表单之后,我启动了3个作业,以便在同一时间内执行3个http调用: val jobA = CoroutineScope(IO).launch {
// saves some data in my database
}
val jobB = CoroutineScope(IO).launch {
// saves an image in my aws bucket
}
val jobC = CoroutineScope(IO).launch {
// if exists, deletes the old ima
在阅读了Kotlin文档之后,我想出了以下代码(不起作用--参见下面)来重复函数调用,直到它返回true或超时为止。
我想暂停执行,直到这个代码块达到超时或成功-它不应该异步执行。
Log.d(TAG, "This is the last line to be logged")
runBlocking {
Log.d(TAG, "this line is never logged")
try {
withTimeout(timeoutMsL) {
while ((isActive) && (
我正在学习Kotlin协程。我读到过runBlocking是桥接同步和异步代码的方法。但是,如果runBlocking停止UI线程,性能会有什么提升呢?例如,我需要在Android中查询一个数据库:
val result: Int
get() = runBlocking { queryDatabase().await() }
private fun queryDatabase(): Deferred<Int> {
return async {
var cursor: Cursor? = null
var queryResul
以下代码使用2个异步函数调用:
import kotlinx.coroutines.*
import kotlin.system.*
fun main() = runBlocking<Unit> {
val time = measureTimeMillis {
val one = async { doSomethingUsefulOne() }
val two = async { doSomethingUsefulTwo() }
println("The answer is ${one.await() + two.a
我创建了一个多平台Kotlin项目(JVM & JS),声明了一个预期的类并实现了它:
// Common module:
expect class Request(/* ... */) {
suspend fun loadText(): String
}
// JS implementation:
actual class Request actual constructor(/* ... */) {
actual suspend fun loadText(): String = suspendCoroutine { continuation ->
我已经创建了一个简单的示例,希望用kotlin-corotines-test编写测试。我在依赖项中添加了kotlin-corotines-test。
我尝试使用runBlockingTest,但是下面的测试(Kotest/FuncSpec)失败了。
@Test
fun `test GET all posts endpoint`() = runBlockingTest {
val response = client.exchange("/posts", Array<Post>::class.java).awaitSingle()
response.s
有没有办法等待在作用域中运行的挂起函数,就像runBlocking对其正在运行的挂起函数所做的那样? 例如, class CoroutineTestCase : CoroutineScope {
val job = Job()
var value = 1
override val coroutineContext: CoroutineContext
get() = job + Dispatchers.Unconfined
fun testFunction() {
async {
delay(200
我对kotlin和它的概念合作很陌生。
我用withTimeoutOrNull做了下面的协同线
import kotlinx.coroutines.*
fun main() = runBlocking {
val result = withTimeoutOrNull(1300L) {
repeat(1) { i ->
println("I'm with id $i sleeping for 500 ms ...")
delay(500L)
如何使用Kotlin jdk异步函数重写此代码,以避免出现“挂起函数只能在协程主体内调用”的错误? var result: CompletableFuture<CarInfoDto>? = null
try {
result = CompletableFuture.supplyAsync {
runBlocking {
myService.getCarInfo(carId) //**"Suspension functions can be called only within coroutine body"
我期待看到输出 black
white 使用以下代码 package delegate
import kotlinx.coroutines.runBlocking
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
open class Color(private val name: String) {
override fun toString(): String {
return name
}
}
class Black : Color("blac