问题标签 [kotlinx.coroutines]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
627 浏览

android - 如何使 UI 调度程序立即恢复继续

我一直在我的 Android 项目中大量使用协程。例如,我使用它们将阻塞调用和 CPU 密集型任务移交给线程池。这是launch(UI)完美的工作:它确保继续在 UI 线程上恢复。

我还在使用协程来处理诸如等待第一次onDraw调用、使用 a 恢复动画循环postOnAnimate()等。在这些情况下,UI 上下文无法满足我的需要,因为它通过向事件提交项目来异步恢复继续循环,即使cont.resume()在 UI 线程上调用。

onDraw在我等待第一次调用 an的情况下,这变得特别糟糕ImageView:我必须根据现在已知的视图尺寸重新定位图像。但是,由于协程异步恢复,onDraw()完成,然后再运行几次,然后我的协程才会恢复。用户体验闪烁,因为不正确定位的图像短暂出现。

是否有一个选项可以强制 UI 调度程序cont.resume()在 UI 线程上调用时立即恢复?

0 投票
1 回答
511 浏览

android - 如何在 flatMap 中使用 await 方法?

我的问题是这个。我有下一个代码

所以,我从我的 android 应用程序中的 Room 表中获取了一个日期。我正在使用异步方法,因为房间查询需要在与 UI 不同的线程中完成。因此,结果是,我想为远程数据库构建一个新查询。问题是我想确保在创建查询时日期已经初始化。考虑到这一点,我使用 await 方法,但是给了我一个错误。它说我不能在没有挂起函数中调用 await 函数。那么,你能想出一个办法来解决这个问题吗?或如何解决?谢谢你

0 投票
2 回答
1883 浏览

android - 如何使用嵌套的挂起函数对 kotlin 协程进行单元测试

下面是我尝试进行单元测试的一段代码。第一个挂起函数之前async(CommonPool)的代码是可测试的,但在那之后,测试继续失败。我尝试使用runBlocking但无论如何都无法测试嵌套的暂停异步函数。

下面是我的单元测试,我正在使用 mockito 来模拟我的听众并检查交互的数量。

但是最后两个verify测试失败了。任何人都可以帮助我进行测试吗?

0 投票
1 回答
773 浏览

kotlin - 如果通过 launch(dispatcher) {...} 调用,如何测试该块是否在 CoroutineDispatcher 上运行

我们最近开始在我们的 Android 应用程序上使用协程。一切都很好,花花公子,直到有人写了大致相当于以下函数的东西:

我们想编写一个测试来验证block使用dispatcher.

我们尝试了以下方法,但这不起作用,因为我们得到一个 NullPointerException 因为dispatcher.parentContext没有被模拟。我讨厌嘲笑它,因为我们不在乎它在什么上下文中执行,只关心它被执行了:

我们已经把它作为一种选择,但它仍然感觉不对:

有人能想出更好的吗?

编辑:

显着的依赖关系如下:

0 投票
1 回答
2807 浏览

android - 协程中的 HandlerThread 替换

我有一些代码使用单个 HandlerThread 和 Handler 向它发送消息。有没有办法用协程做到这一点?我不想每次都创建新的协程,我只想在 HandlerThread 上执行代码块。请帮忙

0 投票
1 回答
3018 浏览

kotlin - 互斥的正确方式

使用 Mutex 改变共享状态的“同步”功能的正确方法是什么?在协程中使用 Mutex 以预期方式启动launch()async()按预期工作,但是如果我用runBlocking()线程启动协程,看起来就像被阻塞(锁定)了很长时间。问题是该函数可能是从多个线程调用的,而我无法通过线程限制来解决这个问题。在这种情况下使用 Mutex 的正确方法是什么?

0 投票
2 回答
1143 浏览

android - Kotlin Coroutines:类 RxJava 订阅正在运行的作业 / 检查协程是否正在运行

我有以下设置(简化):

  • 网络管理器(从后端获取数据)
  • 存储库(处理数据并转发到 ui)

我正在寻找一种使用协程执行以下操作的方法:

  • 在到达目标屏幕之前,我已经开始预取数据,同时导航到另一个屏幕。
  • 到达目标屏幕时,我想检查任务是否仍在运行,如果是,则“订阅”或等待结果,而不是开始新的冗余网络作业。

有没有办法用协程来实现这一点?

0 投票
1 回答
204 浏览

kotlin - 主函数在协程之前终止

我正在研究面向过程的编程课程中的一个项目。

我试图在协程中启动两个对象(生产者和消费者),然后让生产者消费。然后我告诉主函数等待协程完成 Job.join()。但是,这似乎不起作用。因为 invokeOnCompletion 函数是在生产/消费周期开始之前执行的。我在下面包含了代码和输出,希望有任何输入。

这是面向过程的编程课程中的项目。最终目标是生成多个对象实例并让它们使用通道进行通信。我以前从未在 kotlin 中编写过代码,也从未使用过协程。这甚至可能吗,还是我误解了协程?

输出是:

0 投票
1 回答
6547 浏览

android - Kotlin 协程单元测试错误:线程“main @coroutine#1 @coroutine#2”中的异常 java.lang.NullPointerException

我正在尝试对使用 Kotlin 协程制作的演示者进行单元测试,这也是我第一次使用 Mockito

每当我尝试运行单元测试时,它第一次尝试在协程中对我的视图执行任何操作时都会收到以下错误

这是我的演示者的相关部分,错误中引用的行是view.showSigninPanel

呼叫userRepo.isAuthenticated()是暂停呼叫

根据本文,我正在将测试协程上下文传递给我的演示者

https://android.jlelse.eu/mastering-coroutines-android-unit-tests-8bc0d082bf15

这是我目前的单元测试

更新:我一直在做一些额外的测试,看起来如果我在我的演示者中删除暂停调用if (!userRepo.isAuthenticated())它不会崩溃,我可以验证是否有东西在 Mockito 上运行,但这不是一个实际的解决方案.. .但是那个挂起电话的东西会引起问题吗?

0 投票
1 回答
297 浏览

kotlin - 所有挂起函数都有一个作业吗?

在函数coroutineContext[Job]!!内部使用安全吗?suspend所有挂起函数都有一个作业吗?