在Kotlin中以同步方式运行异步任务

问题描述 投票:3回答:1

我正在尝试运行Firebase Firestore的“批处理”工作。由于批处理作业是异步的,并且每个批处理仅处理500个文档,因此我创建了一系列要以同步方式运行的批处理作业,以便我确切地知道上一个批处理何时完成,然后继续下一个处理操作。

但是,当我阅读Kotlin时,我遇到了很多术语,例如runBlocking,Coroutine,Dispatcher,async,await,Context,Suspend,启动,join,Scope,Deferred,Continuation,CommonPool等。 >

此外,许多帖子都说,在最新版本的Kotlin中,情况已经改变。 Kotlin documentation谈论runBlocking,但this post说runBlocking是一件坏事。

经过一番尝试和错误后,我得到了这个要编译

suspend fun doTheThing() {

   for ( b in batchArray) {
      coroutineScope {
      val job = async { b.commit() }
      job.await()
  }}
}

[但是,现在我收到错误消息,“仅应从协程或其他暂停函数调用暂停函数'doTheThing'”我现在很困惑。我只想按顺序执行这些调用,或者等到所有这些完成为止。不知道完成此操作的正确语法是什么,我弄错了哪些概念。

我正在尝试运行Firebase Firestore的“批处理”工作。由于批处理作业是异步的,每个批处理仅处理500个文档,因此我创建了一个批处理作业数组,这些批处理作业要在...

firebase kotlin google-cloud-firestore kotlin-coroutines
1个回答
0
投票

在该问题中,您声明批处理是异步的,但是您的代码片段并没有那么明显,而是使用b.commit()作为同步调用。因此,我假设b.commit()suspend fun。在这种情况下,代码应该是这样:

© www.soinside.com 2019 - 2024. All rights reserved.