问题标签 [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 回答
2053 浏览

android - 无法使用 Mockito 测试使用协程和挂起函数的代码

我正在尝试使用 MVP 编写一个应用程序,并调整我以前用 Java 编写的异步存储库模式以使用 Kotlin 的挂起函数。但是,我无法正确测试使用挂起函数的代码。我得到的进一步是让测试运行并失败,因为我认为模拟没有返回它应该返回的对象,而是返回 null 。

这是一个显示问题的小应用程序:

UserRepository(该方法getUser()在返回虚拟用户和抛出异常之间交替):

风景:

主持人:

和测试:

哪个输出...

我已经尝试了很多东西,但我仍然无法使用 Kotlin 中的挂起函数/协程编写可测试的 MVP 应用程序。连这么简单的一个都做不到。我在这里想念什么?

0 投票
1 回答
775 浏览

android - 使用 kotlin 协程测试加载和错误状态

有没有办法让我模拟一个挂起函数,这样它就不会发出数据或者它会发出错误。使用 RxJava 2,我可以模拟该函数以返回 Observable.error 或 Observable.never,但我在 kotlin 协程中找不到等效功能。这是需要模拟的功能。

从我的 viewModel 我以这种方式调用挂起函数

在该视图模型的测试类中,我想模拟执行函数,使其永远不会返回数据,这样我就可以测试传递给 liveData 的数据是否是我所期望的。在 RxJava 中,我可以模拟返回 Observable.never() 和 Observable.error() 的函数。但是对于协程,我迷失了寻找模拟它的方法。

0 投票
1 回答
1254 浏览

kotlin - 如何触发 CompletableDeferred 的 onAwait 函数?

我正在尝试在创建图像时对其进行索引。我认为这很容易:

但它说Expression onAwait of type SelectClause1<String> cannot be invoked as a function所以也许我用错了?有没有办法注册 CompletableDeferred 完成时要调用的函数?

0 投票
1 回答
920 浏览

kotlin - Kotlin 等待 Channel.isClosedForReceive

打电话后Channel.close()等待Channel.isClosedForReceive成为真的最好的方法是什么?

我正在按顺序处理消息,并希望返回调用后处理的最大消息Channel.close()。但是,如果我只是在调用后获取最大处理消息,close()则在消耗“关闭令牌”之前通道中可能有一些消息,导致实际最大处理消息大于返回的值。

基于文档,Channel.close()我认为 Channel.isClosedForReceive 是我应该等待的。但我期待一些挂起功能等待,而不是不得不轮询它的状态。

0 投票
1 回答
3997 浏览

java - 在 intelliJ 项目中集成 Kotlinx 协程

我现在正在使用 intellij 一段时间。在那里我从事一个javaFx 项目,该项目主要是用 java 编写的,但我发现 Kotlin 是一个不错的选择。

最近我读到了 Kotlin 中的协程,但我不知道如何将 Kotlinx 库添加到我的项目中。我只能找到 maven 和 gradle 的片段。但是我在这方面完全是nobby,我不使用其中之一(至少我是这么认为的)。那么如何将 kotlinx 的东西添加到我的项目中???

Kotlinx: KotlinX 协程

项目结构: 在此处输入图像描述

0 投票
2 回答
1655 浏览

kotlin - kotlin 协程。启动{乐趣}和启动{暂停乐趣}之间的区别

执行上有区别吗?

0 投票
1 回答
414 浏览

kotlin - Kotlin Coroutines 的“Async/Await”的非暂停版本是什么?

是否有.await()可以在 a 的挂起函数之外调用的版本Deferred<T>?我想阻止当前线程直到Deferred<T>返回。

0 投票
2 回答
1698 浏览

kotlin - 如何在 Kotlin 协程接收通道上实现 RxJava 的 combineLatest?

我需要.combineLatest()在 a 上实现以下扩展功能ReceiveChannel

我希望它像 RxJava 的combineLatest().

我怎样才能做到这一点?

编辑:到目前为止我有这个,但它不工作。该sourceB.consumeEach{ }块永远不会被执行。

我还想确保当ReceiveChannel<R>此函数返回的关闭(取消订阅)时,我想确保父频道正确关闭。

0 投票
1 回答
920 浏览

kotlin - 关闭 ExecutorCoroutineDispatcher 的底层 Executor

我反复发现自己编写代码是这样的:

我真正需要的只是协程调度程序,所以我可以编写类似的东西

或者

我需要threadPoolExecutor能够在清理时关闭它。有没有办法使用协程调度程序实例来关闭它?

0 投票
1 回答
1737 浏览

kotlin - 延迟 Kotlin 的 buildSequence 的推荐方法是什么?

我正在尝试轮询分页 API 并在用户出现时向用户提供新项目。

这是示例用法:

我的第一个想法是使用该delay功能,但我收到以下消息:

受限挂起函数只能在其受限协程范围内调用成员或扩展挂起函数

这是签名buildSequence

我认为这条消息意味着我只能使用suspendSequenceBuilder: 中的函数,yield并且不允许yieldAll使用任意函数调用。suspend

现在我正在使用它来阻止每次轮询 API 后一秒钟的序列构建:

这行得通,但它似乎真的不是一个好的解决方案。有没有人遇到过这个问题?