处置以前的可观察选择许多 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。

有没有办法取消/处理之前生成的 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();
   });
}

留下这个问题以供参考,而不是删除它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...