CompositeDisposable -确定顺序



这个问题引用了System.Reactive.Disposables命名空间中的CompositeDisposable类。

CompositeDisposable在其成员上调用Dispose的顺序是否确定?

下面的实验产生列表['a', 'b'],但我在文档中没有看到任何保证特定顺序的内容。

var result = new List<char>();
var disposable = new CompositeDisposable(
    Disposable.Create(() => result.Add('a')),
    Disposable.Create(() => result.Add('b')));
disposable.Dispose();

CompositeDisposable内部使用以下字段存储一次性物品:

private List<IDisposable> disposables;

它使用list .Add(...)方法将项添加到列表的末尾。当通过构造函数添加项时,列表按顺序实例化为可处置项。

然后在处置时对可处置项使用一个简单的foreach循环。

因此,您可以确信当前实现将按顺序处理它们。你也可以做一个聪明的猜测,他们不会改变这种行为,即使他们在未来改变了实现,否则这将是一个破坏性的改变。

恐怕订单没有记录。窥视一下实现就会发现,它按照添加的顺序对它们进行了处理。但由于没有文档记录,我想你不能依赖它

你可以取CompositeDisposable.cs的代码,并使ReversedCompositeDisposable具有相反的Dispose顺序。

来自:

foreach (var d in currentDisposables)
    if (d != null)
        d.Dispose();

:

for (var i = currentDisposables.Length; i > 0; i--)
    if (currentDisposables[i - 1] != null)
        currentDisposables[i - 1].Dispose();

相关内容

  • 没有找到相关文章