Kotlin 在循环中调用异步而不等待

Kotlin 在循环中调用异步而不等待,kotlin,Kotlin,我有一个函数集合,每个函数都使用异步调用。未使用等待(且不得使用): 这段代码的问题在于,因为使用循环来启动每个异步,所以变量testInfo位于异步内部,并且在每次处理循环时都可能被覆盖。我想做的是将async移动到一个函数,并调用该函数。大概是这样的: fun runTests() { GlobalScope.launch { for (testSetup in testSetupClasses) { val setup = testSetup

我有一个函数集合,每个函数都使用异步调用。未使用等待(且不得使用):


这段代码的问题在于,因为使用循环来启动每个异步,所以变量testInfo位于异步内部,并且在每次处理循环时都可能被覆盖。我想做的是将async移动到一个函数,并调用该函数。大概是这样的:

fun runTests() {
    GlobalScope.launch {
        for (testSetup in testSetupClasses) {
            val setup = testSetup()
            runningSetups.add(setup)

            for (test in setup.tests) {
                val testInfo = test.value
                runTestAsync(testInfo)
            }
        }
    }
}

suspend fun runTestAsync(testInfo: TestInfo) {
    async {
        testInfo.getTestToRunAsync()?.invoke { testResult ->
            testInfo.testResult = testResult
        }
    }
}
不幸的是,runTestAsync中的async未解析。我怎样才能解决这个问题?我能想到的一个解决方案是在函数中添加GlobalScope.launch,但这看起来有点难看,如果我对函数有很多调用,我不确定这是否是一个主要的性能问题:

 suspend fun runTestAsync(testInfo: TestInfo) {
        GlobalScope.launch {
            async {
                testInfo.getTestToRunAsync()?.invoke { testResult ->
                    testInfo.testResult = testResult
                }
            }
        }
    }

“可能被覆盖”我不这么认为。
GlobalScope.async
…为什么不?异步代码以异步方式运行。当循环移动到下一个项目,并且上一个异步直到稍后的循环迭代才结束时,testInfo变量将发生更改。或者你是说它不会改变?不,我不这么认为。我希望每次调用
async
都能从循环的迭代中捕获一个新初始化的本地
val testInfo
 suspend fun runTestAsync(testInfo: TestInfo) {
        GlobalScope.launch {
            async {
                testInfo.getTestToRunAsync()?.invoke { testResult ->
                    testInfo.testResult = testResult
                }
            }
        }
    }