我对Rx相当新,并且无法找到解决方案来解决我的问题。我正在使用Rx通过客户端库开始下载。目前,它看起来像:缓冲订阅的无功扩展
private void DownloadStuff(string descriptor, Action<Stuff> stuffAction)
{
this.stuffDownloader.GetStuffObservable(descriptor).Subscribe(x => stuffAction(x))
}
where stuffDownloader是在客户端库中定义的下载逻辑的包装。但是我遇到了一个问题,那就是我太多地调用了DownloadStuff,导致很多下载,并且压倒了系统。现在我想要做的是
private void DownloadStuff(string descriptor, Action<Stuff> stuffAction)
{
this.stuffDownloader.GetStuffObservable(descriptor)
.SlowSubscribe(TimeSpan.FromMilliSeconds(50))
.Subscribe(x => stuffAction(x))
}
其中,SlowSubscribe是Rx操作的一些组合,仅在某个时间间隔订阅。
通常我会将这些DownloadStuff调用放在一个队列中并在一段时间内关闭它们,但最近我一直试图通过Rx做更多的事情。我发现了三种解决方案:
- 此功能存在,并且可以在订阅端完成。
- 这是可能的,但下载器的基础设施是不正确的,应该改变(即stuffDownloader需要有不同的行为)
- 这不应该与Rx,做另一种方式。
发生在我身上#2可能通过将IObservable的描述符传递给客户端库,并以某种方式减慢描述符进入Observable的方式。
你真正的问题是什么? – 2013-05-22 19:05:59