问题标签 [disposable]

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 回答
58 浏览

android - 无法解析定义的 Disposable

从数据库中查询数据并返回一个函数Flowable

订阅它时,一次性没有解决(见截图)。

但是如果确实定义了var disposable: Disposable = null第一个就可以了

如果不先定义它为什么会unresolved出错?

在此处输入图像描述

0 投票
1 回答
88 浏览

c# - 继承自 Stephen Cleary 的 Nito.Disposables NuGet 包

我看到了 Stephen Cleary 的 Disposables NuGet 包的实现,在我的情况下它似乎很完美,即使如此,我也找不到如何从它继承的示例。

我的想法是 make UnsubscribeAsync().GetAwaiter().GetResult();to await UnsubscribeAsync();,这意味着它应该被包装到一个 IAsyncDisposable 中。我怎么能用一个密封的类来实现呢?

0 投票
0 回答
25 浏览

android - 为什么我在 View Model 中的 observable 仅在第二次调用后才发出值

我有observable的奇怪行为。我从ViewModel getData()中的SecondFragment void调用它应该逐秒发出值,但它不会。在日志中我只有:

当我返回到上一个片段(ViewModelFragment被销毁(一次性处置))并再次输入时,它会正常工作。此外,当我第二次从按钮调用此方法时。

有人知道为什么它不能正常工作吗?

BaseFragmentCompat

第二片段

基本视图模型

视图模型

0 投票
0 回答
25 浏览

android - 如何知道是否所有的一次性用品都被清除了?

我正在使用RxJavawith ViewModel,所以当调用 viewModel 的onCleared方法时,我调用disposable.clear(),作为一次性对象 a CompositeDisposable

问题是,有时,我通过flatMap返回不同FlowableSingle对象的调用连接多个调用,所以我有两个问题:

  1. 我应该将我在 flatMap 调用中使用的所有 Flowable/Single 对象添加到组合中吗?还是只是整个链条的第一个?
  2. 有什么方法可以知道我是否忘记“添加到复合材料中”任何一次性用品?
0 投票
1 回答
70 浏览

c# - 处理不可变的一次性对象

给定一个 Disposable Immutable 类,它有时包含一些很大的东西,并且您不知道当对象被释放两次时是否存在副作用或异常,(并且我不持有代码所有权来修改它以解决这种情况) 如何处理链式转换的最佳方法是什么?

以位图为例。

如果您需要使用转换创建新位图,则占用该内存是有意义的,但如果转换没有效果(RotateFlipNone、scale = 0 或 pad = 0),则创建新位图没有意义。我发现自己创建克隆是为了在每次转换时返回一个新的 Disposable 对象,而不是返回相同的输入对象。

例如,如果 Date 对象是 Disposable 并且您需要执行 n 个操作,则相同的情况将适用于该对象,其中一些操作对输入参数没有影响(添加零天)。

关键是,某些操作对输入参数没有影响,创建新对象仍然比跟踪哪个用户是对象的第一个所有者更容易,并且如果某些参数事先了解您正在使用的 API真的会创建一个不同的项目或只是一个副本。

  • 这种情况有模式吗?
  • 是否using考虑到它持有的对象引用属于另一个using,所以它不会两次处理它或抛出 ObjectDisposedException ?
  • 即使需要更多的计算和内存,每次都拥有一个新对象是最安全的方法吗?(从我的角度来看,它看起来是最易读的)

我想到的一个选择是拥有一个 Disposable 包装类,以确保它持有的对象不会被释放两次,但这意味着我需要事先知道转换是否具有零效应,所以我不会调用它或者转换函数知道这个包装机制。就像是:

它会像这样使用:

这要大得多,令人困惑,需要对每个变换函数有更多的了解(+ 大的 nono 原因列表)。

我最好的猜测是保持初始转换,除非存在真正的性能问题,但想知道是否存在一些优雅的解决方案:

  • 有时返回新实例并有时返回给定 IDisposable 输入参数本身的函数。
  • 而不是总是返回一个新实例以避免处理两次
0 投票
1 回答
79 浏览

c# - 制造一次性物品的工厂

假设我有一家工厂,它基于一次性资源创建服务。我认为第一个解决方案是最干净的,但我无法弄清楚如何在我的情况下处理“实例”。第二个将是一个解决方案,但可以称为工厂吗?我不这么认为,因为它拥有适当的资源。此外,“DisposableIOResource”是那种很难创建的服务,你只想躲在工厂后面。有解决这种情况的好模式吗?在我的两个草稿片段下方。

---编辑我最终得到了另一种解决方案,也许是一个更清洁的解决方案:

0 投票
0 回答
31 浏览

android - Kotlin如何在一个类中取消多个rx一次性

所以我在我的班级中有一个一次性声明如下:private var disposable = Disposables.disposed() 我像这样使用它:

基本上它下载一个文件,并且函数下载返回一个 Observable。它工作得很好,我的文件被下载,我处理错误和 onComplet。我的问题是我在库类而不是活动中使用这个函数。所以我不知道如何取消我的一次性用品。当我在课堂上使用一次性用品时,我可以这样做:

它会阻止我的一次性用品。但我不知道如何在活动之外处理它。我试图在我的库中添加一个方法:

当我的活动 onDestroyed 被调用时调用它,我打印了“cancelDownload”,但我的一次性用品没有停止。我想要实现的是:当我退出下载活动时,一次性下载被取消。我错过了什么吗?或者我该怎么做?

编辑

正如有人建议我正在使用下载多个文件,所以我有多个一次性文件,这就是我无法处理的原因。所以我加了一个private val disposables = CompositeDisposable()来存放我的一次性用品。所以我做了一次性的 val 并在使用后添加了它:disposables.add(disposable)我将取消功能更改为:

问题是它仍然不起作用,当我退出下载活动时,我打印了“cancelDownload”但下载继续。此外,当我清除数据并尝试重新下载后,下载不会开始。看起来我的一次性用品没有再次创建。

编辑2

这似乎disposables.dispose()是一种很难清楚的地方,我们不再能够订阅任何可观察的东西,所以我disposables.clear()改用它,它只是按照我的意愿删除了观察者,所以它起作用了。