- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将一些旧的 RxJava 代码移植到 Coroutines。使用 RxJava,我可以在我的 Activity 中做到这一点:
someBgOperation()
.as(AutoDispose.autoDisposable(AndroidLifecycleScopeProvider.from(MyActivity.this)))
.subscribe(
MyActivity.this::onSuccess,
MyActivity.this::onError
);
lifecycleScope
启动这个等效代码。在 Activity 中,或在
viewModelScope
如果使用 ViewModel:
viewModelScope.launch {
try {
someBgOperation()
} catch (e: Exception){
//show dialog
}
}
someBgOperation
引发的正常错误。本身,但也与
CancellationException
s 由 coroutines 库在后台用于处理取消。如果我在 Activity 关闭时尝试在那里显示一个对话框,我可能会遇到新的异常。所以我被迫做这样的事情:
viewModelScope.launch {
try {
someBgOperation()
} catch (ce: CancellationException){
//do nothing, activity is closing
} catch (e: Exception){
//show dialog
}
}
CancellationException
返回。 catch 以保持 UI 安全(并且这些返回是标记返回)。我发现自己一次又一次地重复这个丑陋的模板。
最佳答案
我可以提出两种解决方案。首先,额外的catch(e: CancellationException)
子句看起来有点冗长。您可以将代码简化为:
viewModelScope.launch {
try {
someBgOperation()
} catch (e: Exception) {
if (e !is CancellationException) // show dialog
}
}
catch
运算符旨在为此目的而忽略取消。由于您实际上不会通过流发送任何值,因此您应该使用
Flow<Nothing>
:
flow<Nothing> {
someBgOperation()
}.catch { e ->
// show dialog
}.launchIn(viewModelScope)
关于android - Kotlin:如何绕过 CancellationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62220286/
我正在使用 react 堆核心 3.1.4 . 考虑以下代码片段: Flux flux = Flux.create(sink -> sink.next("test")) .replay(1)
我正在将一些旧的 RxJava 代码移植到 Coroutines。使用 RxJava,我可以在我的 Activity 中做到这一点: someBgOperation() .as(AutoDispose
我有一个运行 TaskQueue 作业的 Java GAE 实例。在过去 48 小时内,我收到了大量 CancellationException 错误(24 小时内大约有 36 个错误)。 该错误始终
根据 Javadoc,Future.get() ,抛出 TimeoutException 和 CancellationException 以及另外 2 个异常。 TimeoutException 和
我正在尝试处理一个包含超过 20K 行的大 Excel 文件。每行都应保存为数据存储中的实体。首先,我使用 Blobstore 在 servlet 中获取 excel 文件,然后使用任务队列服务对任务
我正在编写一个使用 cassandra-unit 的商店单元测试。 public class StoreTest { public void before() throws Exception {
我想等待两个任务完成然后返回它们的结果,但有时我会收到此错误。为什么? CancellationException 是从哪里来的? public class ShouldVoteTask extend
我有一个相当复杂的应用程序,我正在尝试为 Android 手机创建它。我有一个类使用 Java Process Builder 和一些私有(private)类来读取输入和输出流。 有时,当我尝试 pi
我在 Crashlytics 中收到了相当多的致命崩溃报告,这似乎是由协程取消引起的。而且我不知道如何补救它,也无法重现它。 Crashlytics 中的错误是: Fatal Exception: j
我的一些 App Engine Search API 查询出现“java.util.concurrent.CancellationException:任务已取消”异常。该错误是可重现的。 我有多个索引
我使用的是 Google App Engine 1.9.48 版。在一些数据存储查询期间,我随机收到“CancellationException:任务已取消”错误。而且我不太确定到底是什么导致了这个错
我是一名优秀的程序员,十分优秀!