J'ai du mal à comprendre comment fonctionne Observable.Delay et quand Dispose() doit être appelé. Est-ce que quelqu'un de familier avec Rx pourrait m'aider s'il vous plaît ?
L'extrait de code suivant :
static void Main(string[] args)
{
var oneNumberEveryFiveSeconds = new SomeObservable();
// Instant echo
oneNumberEveryFiveSeconds.SubscribeOn(Scheduler.ThreadPool).Subscribe(num => Console.WriteLine(num));
// One second delay
oneNumberEveryFiveSeconds.Delay(TimeSpan.FromSeconds(1)).SubscribeOn(Scheduler.ThreadPool).Subscribe(num => Console.WriteLine("...{0}...", num));
// Two second delay
oneNumberEveryFiveSeconds.Delay(TimeSpan.FromSeconds(2)).SubscribeOn(Scheduler.ThreadPool).Subscribe(num => Console.WriteLine("......{0}......", num));
Console.ReadKey();
}
public class SomeObservable : IObservable<int>
{
public IDisposable Subscribe(IObserver<int> o)
{
for (var i = 0; i < 2; i++)
{
o.OnNext(i);
}
o.OnCompleted();
return new DisposableAction(() => { Console.WriteLine("DISPOSED"); });
}
}
public class DisposableAction : IDisposable
{
public DisposableAction(Action dispose)
{
this.dispose = dispose;
}
readonly Action dispose;
public void Dispose()
{
dispose();
}
}
donne le résultat suivant :
0
1
ÉLIMINÉ
ÉLIMINÉ
ÉLIMINÉ
...0...
...1...
......0......
......1......
Je m'attendais à ce que ce soit plutôt comme.. :
0
1
ÉLIMINÉ
...0...
...1...
ÉLIMINÉ
......0......
......1......
ÉLIMINÉS
Une idée ?