我正在尝试运行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个文档,因此我创建了一个批处理作业数组,这些批处理作业要在...
在该问题中,您声明批处理是异步的,但是您的代码片段并没有那么明显,而是使用b.commit()
作为同步调用。因此,我假设b.commit()
是suspend fun
。在这种情况下,代码应该是这样: