You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中是否有可替代C# AutoResetEvent的同类实现?

Kotlin中可以根据技术栈场景选择对应的工具实现类似WaitOne的等待逻辑,同时满足循环执行方法、每次获取返回值的需求,具体实现方案如下:

方案1:传统线程场景(无协程)

Kotlin/JVM平台可以直接复用JDK提供的CountDownLatch实现等待逻辑,示例代码如下:

import java.util.concurrent.CountDownLatch
import java.util.concurrent.TimeUnit

fun exampleMethod(): String{
    var command = "example string"
    // 此处添加字符串处理逻辑
    return command
}

fun main() {
    // 可自定义循环终止条件替换true
    while (true) {
        // 初始化计数为1的CountDownLatch,实现单次等待能力
        val latch = CountDownLatch(1)
        var commandResult: String? = null
        
        // 模拟异步执行任务的场景
        Thread {
            commandResult = exampleMethod()
            latch.countDown() // 任务执行完成后释放等待
        }.start()
        
        // 等效于WaitOne方法,可自定义超时时间,此处设置为10秒
        val waitSuccess = latch.await(10, TimeUnit.SECONDS)
        if (waitSuccess && commandResult != null) {
            // 此处处理拿到的command返回值
            println("本次获取到的command值:$commandResult")
        }
        
        // 可自定义间隔时间,避免循环空转
        Thread.sleep(1000)
    }
}

如果需要可重复使用的等待逻辑,也可以将CountDownLatch替换为CyclicBarrier。

方案2:Kotlin协程场景(推荐)

如果项目使用Kotlin协程,可以用更轻量的协程工具实现等待,不会阻塞线程,性能开销更低:

import kotlinx.coroutines.*
import kotlinx.coroutines.sync.Mutex

fun exampleMethod(): String{
    var command = "example string"
    // 此处添加字符串处理逻辑
    return command
}

fun main() = runBlocking {
    // 协程活跃时持续循环
    while (isActive) {
        // 异步启动任务,await方法等效于WaitOne,仅挂起不阻塞线程
        val resultDeferred = async(Dispatchers.IO) {
            exampleMethod()
        }
        
        val commandResult = resultDeferred.await()
        // 此处处理拿到的command返回值
        println("本次获取到的command值:$commandResult")
        
        // 可自定义间隔等待时间
        delay(1000)
    }
}

内容的提问来源于stack exchange,提问作者RaceyT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:09:00