Tag: reactive programming

如何使用Observable实现轮询?

我有一个参数化的rest调用应该每隔五秒用不同的参数执行: Observable restCall = api.method1(param1); 我需要创建一个Observable ,它将使用param1的不同值每5秒轮询一次restCall。 如果api调用失败,我需要收到错误并在5秒内进行下一次调用。 应仅在restCall完成时(成功/错误)测量调用之间的间隔。 我目前正在使用RxJava,但.NET示例也会很好。

使用Reactive Extensions搜索TextChanged

我试图在具有10000多条记录的数据库表上实现即时搜索。 搜索文本框内的文本发生更改时搜索开始,当搜索框变空时,我想调用另一种加载所有数据的方法。 此外,如果用户更改搜索字符串,而正在加载另一个搜索的结果,则应停止加载这些结果以支持新搜索。 我像下面的代码一样实现它,但我想知道是否有更好或更清晰的方法来使用Rx(Reactive Extension)运算符,我觉得在第一个observable的subscribe方法中创建第二个observable比声明性的,对于if语句也是如此。 var searchStream = Observable.FromEventPattern(s => txtSearch.TextChanged += s, s => txtSearch.TextChanged -= s) .Throttle(TimeSpan.FromMilliseconds(300)) .Select(evt => { var txtbox = evt.Sender as TextBox; return txtbox.Text; } ); searchStream .DistinctUntilChanged() .ObserveOn(SynchronizationContext.Current) .Subscribe(searchTerm => { this.parties.Clear(); this.partyBindingSource.ResetBindings(false); long partyCount; var foundParties = string.IsNullOrEmpty(searchTerm) ? partyRepository.GetAll(out partyCount) : partyRepository.SearchByNameAndNotes(searchTerm); foundParties .ToObservable(Scheduler.Default) .TakeUntil(searchStream) .Buffer(500) […]

使用Reactive Extensions重新排序事件

我正在尝试重新排序在不同线程上无序的事件。 是否可以创建匹配这些大理石图的反应式扩展查询: s1 1 2 3 4 s2 1 3 2 4 result 1 2 3 4 和… s1 1 2 3 4 s2 4 3 2 1 result 1234 即:仅以版本号顺序发布结果。 我最接近的是每次s1时刻都使用Join打开一个窗口,只有当s2到达时才使用相同的数字关闭它。 像这样: var publishedEvents = events.Publish().RefCount(); publishedEvents.Join( publishedEvents.Scan(0, (i, o) => i + 1), expectedVersion => publishedEvents.Any(@event => @event.Version == expectedVersion), _ => Observable.Never(), […]

如何获得N hot Observable 实例的“最后”项的总和?

编辑:2013年9月15日 – 我正在描述我的情景进一步分解为帮助每个人更好地了解我的情况的步骤。 添加了整个应用程序的源代码以供下载。 如果要跳转到原始问题,请向下滚动到最后一个标题。 请让我知道这些问题。 谢谢 摘要 阿拉斯加州首府朱诺有一个AST(阿拉斯加州警官)总部大楼,他们希望在这个大屏幕上显示一个自动显示和更新的单个号码。 该号码称为(犯罪商数指数)或CQI CQI基本上是一个计算出的数字,用于显示当前的国家犯罪情况…… 如何计算? 运行屏幕的程序是一个.NET WPF应用程序,它通过Hot IObservable流不断接收CrimeReport对象。 每个城市计算CQI,然后采用所有城市的Sum(),称为国家CQI以下是计算国家CQI的步骤 第1步 – 接收犯罪数据 每次报告犯罪时,CrimeReport都会发送到.NET应用程序。 它具有以下组件 犯罪日期时间 市 – 市/县管辖 SeverityLevel – 严肃/非严重 EstimatedSolveTime – AST确定解决犯罪所需的估计天数。 所以在这一步中,我们订阅了IObservable并创建了MainViewModel的实例 IObservable reportSource = mainSource.Publish(); MainVM = new MainViewModel(reportSource); reportSource.Connect(); 第2步 – 逐个城市,每个城市做数学 当您收到报告时,请按城市分组 var cities = reportSource.GroupBy(k => k.City) .Select(g => new CityDto(g.Key, […]