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

android-fragments - 带有 android 客户端交互的 kotlin 协程

假设我有一个片段打开另一个片段并等待该片段的回答。

kotlin 协程是否可以使代码看起来同步?

意思是这样的?

0 投票
1 回答
1845 浏览

android - 取消文件上传(改造)从协程kotlin android开始

我试图在我的项目中摆脱 RxJava2 并用 kotlin 协程替换它。我 90% 的 RxJava 代码不再存在,但我仍然无法替换一个网络请求。用户可以在我的应用程序中将照片发送到后端(使用改造的多部分表单数据请求)。如果照片尚未加载,用户也可以取消照片上传。使用 RxJava,我能够保留上传请求的 Disposable 对象,如果尚未处理,如果用户单击取消上传按钮,我可以处理它。由于此操作,网络请求也被取消。所以我们可以节省一些用户流量和电池。是否可以使用 kotlin 协程实现相同的逻辑?在官方文档中,协程取消是合作的,我们需要在循环中(或在文件部分发送之间)使用一些挂起函数来停止协程。

0 投票
2 回答
829 浏览

kotlin - Consumable channel

Use Case

Android fragment that consumes items of T from a ReceiveChannel<T>. Once consumed, the Ts should be removed from the ReceiveChannel<T>.

I need a ReceiveChannel<T> that supports consuming items from it. It should function as a FIFO queue.

I currently attach to the channel from my UI like:

I detach by calling uiJob.cancel().

Desired behavior:

Unfortunately, when I detach from the channel, the channel is closed. This causes .send(4) and .send(5) to throw exceptions because the channel is closed. I want to be able to detach from the channel and have it remain usable. How can I do this?

Channel<Int>(UNLIMITED) fits my use case perfect, except that is closes the channel when it is unsubscribed from. I want the channel to remain open. Is this possible?

0 投票
10 回答
33743 浏览

android - Kotlin Android debounce

Is there any fancy way to implement debounce logic with Kotlin Android?

I'm not using Rx in project.

There is a way in Java, but it is too big as for me here.

0 投票
2 回答
1319 浏览

jdbc - Kotlin:创建自定义 CoroutineContext

我在我的 API 后端使用 Kotlin。我不想在common pool. 基本上,我想创建一个CoroutineContext具有多个与数据库匹配的线程maximumPoolSize

完成此任务的最佳方法是什么(通常以及针对我的特定用例)?我知道 Kotlincontexts开箱即用,但创建自己的最佳方法是什么?

额外问题:如果我的 jdbc 连接池大小为 3,那么使用线程池大小为 3 的协程上下文是否有意义?这能保证最好的并发性吗?

0 投票
1 回答
65 浏览

android - 在查询数据库中以错误的顺序接收数据

活动接收意图

NoteViewModel 类

如果我通过一个意图从数据库中获取一个带有 uuid 的 Note 对象,并在 titleEditText 和 contentEditText 中设置接收到的数据,那么 Note 中的数据集来自我们单击 RecyclerView 中的 Note 项时调用的先前意图。在第一次单击 Note 项目时,我得到了我设置的“测试标题”和“测试内容”的默认值。

上述是大多数时候的行为。有时,titleEditText 和 contentEditText 中的数据集属于正确的 Note 对象。

有人可以告诉我我做错了什么吗?如何纠正我的应用行为?

0 投票
4 回答
4575 浏览

kotlin - kotlin async 无法编译

以下代码无法编译,尽管文档说它应该像这样简单:

错误是:

0 投票
0 回答
480 浏览

android - runBlocking(UI) 死锁 - (Kotlin, Coroutine)

我尝试为 IO 进程管理我的线程。其中之一是用于领域。

喜欢……</p>

如果我将 val dbContext 设置为 newSingleThreadContext(“databaseIO”)... 效果很好,但是我开发了一个 android-library,所以如果 app 模块上有 Realm 的实现,我需要在同一个线程上设置用法。通常,每个人都使用主线程来访问 Realm。在那种情况下,我尝试设置 UI,但它导致了 ANR。我可以理解它为什么会导致 ANR,但我找不到适合这种情况的解决方案。

注意:如果我将它与启动一起使用......它适用于这里。但是在我的 RealmManager 类中,我需要使用 runBlocking。所以没办法只用launch…:slight_smile: like…</p>

或者

我有什么做错的方式,或者有什么更好的实施建议吗?

0 投票
1 回答
119 浏览

kotlin - “job + UI”上下文和使用“parent = job”有什么区别?

UI 协程指南包含有关如何管理 UI 协程生命周期的部分。它解释了我们应该创建一个顶级Job实例并将复合协程上下文传递给contextJob + UI我们启动的所有协程:

在我的项目中实现此模式时,我很自然地改为使用contextJob

我还没有测试过行为上的差异,但我对这两个选项之间的语义差异感兴趣。它们看起来与我非常相似,但我更喜欢使用它,parent = contextJob因为它的作用更明显。具体来说,我注意到这parent是允许的null,但如果我使用+,我可能不得不将其NonCancellable用作空对象。

contextJob用作or的parent参数有什么问题吗?launchactor

0 投票
0 回答
49 浏览

kotlin - 令人困惑的“选择”合同

我正在努力理解这份合同select

  1. onSend, onReceive, onReceiveOrNull, 和onLock子句是原子可取消的。当 select 抛出CancellationException时,这意味着这些子句没有执行它们各自的操作。

  2. 作为原子取消的副作用,线程绑定的协程(例如,对于某些 UI 线程)可能会在从同一线程取消后继续执行,如果此选择操作已在原子可取消子句上恢复并且延续被发布到线程的队列中执行。

UI在上下文的示例中,这对我来说是有意义的:

  • 表达式选择一个子句并将其select代码发布到 UI 事件队列
  • 当从队列中挑选代码时,它首先检查的是isActive标志。如果降低,则代码不会运行
  • 这会破坏取消的原子性:您既没有获得CancellationExceptioninselect子句,也没有运行代码(当子句的回调在队列中等待时发生取消)
  • 这就是为什么isActive跳过检查并且代码运行的原因,即使它同时被取消

但是,这不是(1) 中给出的保证。它没有说“您的处理代码运行,或者您CancellationExceptionselect表达式中得到 a”。它只说“如果出现异常,则表示代码没有运行”。这种保证可以在没有 (2) 中给出的行为的情况下实现,因此它不是 (1) 的副作用。

看起来(2)中对行为的描述是正确的,但它提供的保证并不像(1)中描述的那样。它是“如果你没有得到CancellationException,那么处理程序代码将运行”。

文件不应该说明更强的非此即彼的保证吗?