gpt4 book ai didi

kotlin - 从多个Kotlin协程暂停功能到单个同步功能

转载 作者:行者123 更新时间:2023-12-02 12:53:33 25 4
gpt4 key购买 nike

所以,我有多个类似于这样的suspended函数

suspend fun getLatestCampaign(): List<Campaign> {
return listOf()
}

suspend fun getRecommendedCampaign(): List<Campaign> {
return listOf()
}

由于我想异步运行这些功能,所以我做到了
val recommendedCampaignAsync = async(Dispatchers.IO) { getRecommendedCampaign() }
val latestCampaignAsync = async(Dispatchers.IO) { getLatestCampaign() }

而且我还具有处理这些异步操作结果的功能
fun displayCampaigns(campaigns: List<Campaign>) {}

如果我想每次完成这些异步操作之一,该怎么办,我想调用 displayCampaigns并确保 displayCampaigns同步执行。
所以我不想等待这两个异步操作都完成,然后再调用 displayCampaigns

最佳答案

  • async不是您的工作的工具,因为您想同步使用结果。
  • Dispatchers.IO不是您应该使用的一种,因为您调用了可挂起的函数(我假设它们是非阻塞的,否则不应将其声明为可挂起的)。

  • 您想要的是最简单的情况: launch Main调度程序中的两个协程,它们应该已经被设置为默认协程:
    class YourGuiClass : WhateverYourFrameworkWantsYouToExtend, CoroutineScope {
    override val coroutineContext = Job() + Dispatchers.Main

    fun refreshCampaigns() {
    launch {
    displayCampaigns(getRecommendedCampaign())
    }
    launch {
    displayCampaigns(getLatestCampaign())
    }
    }
    }

    关于kotlin - 从多个Kotlin协程暂停功能到单个同步功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331886/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com