fsprojects / FSharp.Control.Reactive

Extensions and wrappers for using Reactive Extensions (Rx) with F#.

Home Page:http://fsprojects.github.io/FSharp.Control.Reactive

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Disposable.compose mutates previous values

deviousasti opened this issue · comments

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.