问题标签 [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.
c# - 继承自 Stephen Cleary 的 Nito.Disposables NuGet 包
我看到了 Stephen Cleary 的 Disposables NuGet 包的实现,在我的情况下它似乎很完美,即使如此,我也找不到如何从它继承的示例。
我的想法是 make UnsubscribeAsync().GetAwaiter().GetResult();
to await UnsubscribeAsync();
,这意味着它应该被包装到一个 IAsyncDisposable 中。我怎么能用一个密封的类来实现呢?
android - 为什么我在 View Model 中的 observable 仅在第二次调用后才发出值
我有observable的奇怪行为。我从ViewModel getData()中的SecondFragment void调用它应该逐秒发出值,但它不会。在日志中我只有:
当我返回到上一个片段(ViewModel和Fragment被销毁(一次性处置))并再次输入时,它会正常工作。此外,当我第二次从按钮调用此方法时。
有人知道为什么它不能正常工作吗?
BaseFragmentCompat
第二片段
基本视图模型
视图模型
android - 如何知道是否所有的一次性用品都被清除了?
我正在使用RxJava
with ViewModel
,所以当调用 viewModel 的onCleared
方法时,我调用disposable.clear()
,作为一次性对象 a CompositeDisposable
。
问题是,有时,我通过flatMap
返回不同Flowable
或Single
对象的调用连接多个调用,所以我有两个问题:
- 我应该将我在 flatMap 调用中使用的所有 Flowable/Single 对象添加到组合中吗?还是只是整个链条的第一个?
- 有什么方法可以知道我是否忘记“添加到复合材料中”任何一次性用品?
c# - 处理不可变的一次性对象
给定一个 Disposable Immutable 类,它有时包含一些很大的东西,并且您不知道当对象被释放两次时是否存在副作用或异常,(并且我不持有代码所有权来修改它以解决这种情况) 如何处理链式转换的最佳方法是什么?
以位图为例。
如果您需要使用转换创建新位图,则占用该内存是有意义的,但如果转换没有效果(RotateFlipNone、scale = 0 或 pad = 0),则创建新位图没有意义。我发现自己创建克隆是为了在每次转换时返回一个新的 Disposable 对象,而不是返回相同的输入对象。
例如,如果 Date 对象是 Disposable 并且您需要执行 n 个操作,则相同的情况将适用于该对象,其中一些操作对输入参数没有影响(添加零天)。
关键是,某些操作对输入参数没有影响,创建新对象仍然比跟踪哪个用户是对象的第一个所有者更容易,并且如果某些参数事先了解您正在使用的 API真的会创建一个不同的项目或只是一个副本。
- 这种情况有模式吗?
- 是否
using
考虑到它持有的对象引用属于另一个using
,所以它不会两次处理它或抛出 ObjectDisposedException ? - 即使需要更多的计算和内存,每次都拥有一个新对象是最安全的方法吗?(从我的角度来看,它看起来是最易读的)
我想到的一个选择是拥有一个 Disposable 包装类,以确保它持有的对象不会被释放两次,但这意味着我需要事先知道转换是否具有零效应,所以我不会调用它或者转换函数知道这个包装机制。就像是:
它会像这样使用:
这要大得多,令人困惑,需要对每个变换函数有更多的了解(+ 大的 nono 原因列表)。
我最好的猜测是保持初始转换,除非存在真正的性能问题,但想知道是否存在一些优雅的解决方案:
- 有时返回新实例并有时返回给定 IDisposable 输入参数本身的函数。
- 而不是总是返回一个新实例以避免处理两次
c# - 制造一次性物品的工厂
假设我有一家工厂,它基于一次性资源创建服务。我认为第一个解决方案是最干净的,但我无法弄清楚如何在我的情况下处理“实例”。第二个将是一个解决方案,但可以称为工厂吗?我不这么认为,因为它拥有适当的资源。此外,“DisposableIOResource”是那种很难创建的服务,你只想躲在工厂后面。有解决这种情况的好模式吗?在我的两个草稿片段下方。
---编辑我最终得到了另一种解决方案,也许是一个更清洁的解决方案:
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()
改用它,它只是按照我的意愿删除了观察者,所以它起作用了。