我怎样才能停止"一个Observable来自生成通知而另一个IObservable产生特定值?

时间:2014-11-25 19:54:45

标签: c# system.reactive

我想用Rx建模网络连接状态:

  • 网络连接随时都可以上升或下降。
  • 网络连接用于将数据发送到服务器。
  • 当网络连接断开时,我甚至不想尝试发送数据,而是缓冲它直到连接再次出现。

我有两个可观察者:

  • connection生成有关连接状态更改的true / false通知
  • data生成要发送的数据的通知

虽然connection已启用(最新值== true),但我希望data通知能够立即发送。当connection发生故障时,我希望来自data的通知排队,直到它再次上升。

这是所需结果序列的大理石图:

D = down
U = up

connection D  U    D      U
data       1 2   3  4 5 6
result        12 3        456

我找到了一种感觉不正确的解决方案,因为在本地变量(Runnable Gist)中保存状态。

var data = Observable.Interval(TimeSpan.FromSeconds(1));
var connection = new Subject<bool>();

var connected = false;
connection.Do(x => connected = x).Subscribe();

data
  .Window(() => connection)
  .Subscribe(window =>
  {
    Console.Write("Starting new window: ");
    if (connected == false)
    {
      Console.WriteLine("Buffering until online");
      window
        .Buffer(() => connection.Where(x => x))
        .Subscribe(buffered => buffered
                                 .ToObservable()
                                 .Subscribe(Console.WriteLine));
    }
    else
    {
      Console.WriteLine("Forwarding notifications");
      window.Subscribe(Console.WriteLine);
    }
  });

谢谢!

0 个答案:

没有答案