Disposable.compose mutates previous values
deviousasti opened this issue · comments
Asti commented
Description
Disposable.compose
mutates previous if either is a already a composite.
Repro
let printn n = fun () -> printfn "Disposing %d" n
let dis1 = Disposable.create (printn 1)
let dis2 = Disposable.create (printn 2)
let dis3 = Disposable.create (printn 3)
let group1 = Disposable.compose dis1 dis2
let group2 = Disposable.compose group1 dis3
group1.Dispose()
group2.Dispose()
assert(group1 = group2)
This prints:
Disposing 2
Disposing 1
Disposing 3
Explanation:
group1
is mutated, so it disposes all 3, in the order 2, 1.
group1 and group2 are the same, so group2.Dispose()
does nothing because it's already disposed.