处理先前可观察到的 selectmany rx

Dispose previous observable selectmany rx

我正在使用以下设置监视目录:

var folder = new Subject();
folder.OnNext("somepath");

folder.SelectMany(FileMonitor)
  .Subscribe(x => Console.WriteLine($"Found: {x}"));

public IObservable<string> FileMonitor(string pathToWatch){
   return Observable.Create<string>(obs => {
     var dfs = CreateAndStartFileWatcher(pathToWatch,obs);
     () => dfs.Dispose();
   });
}

这行得通,但如果我向主题传递新路径,则不会处理以前的 FileMonitor。

有没有办法cancel/dispose之前生成的Observable?

看起来我需要:http://reactivex.io/documentation/operators/switch.html但这在c#中没有实现?

有时,提出问题会给自己带来新的见解。 解决方案是使用 switch 可用,但仅适用于 Observable。

所以应该是:

var folder = new Subject();
folder.OnNext("somepath");

folder.Select(FileMonitor)
  .Switch()
  .Subscribe(x => Console.WriteLine($"Found: {x}"));

public IObservable<string> FileMonitor(string pathToWatch){
   return Observable.Create<string>(obs => {
     var dfs = CreateAndStartFileWatcher(pathToWatch,obs);
     () => dfs.Dispose();
   });
}

留下这个问题作为参考而不是删除它。