批量循环使用具有无效扩展名的数据库表

时间:2018-06-14 18:34:59

标签: c# system.reactive reactive

我正在尝试找出使用Reactive Extensions轮询单个数据库表的方法。

我有一个方法GetEmployees(),它返回Employee表中的所有记录。

    var query = "SELECT emp_no, first_name, last_name FROM Employees" ;
    while (reader.Read())
      { :
        :
        yield return employee;
     }

接下来,我有一个Extension方法,它接受上面的Employee Source(AsObservable)并定期轮询observable并返回Actual results。

 public static IObservable<T> Poll<T>(this IObservable<T> source, TimeSpan period, IScheduler scheduler)
        {
            return Observable.Timer(period, scheduler)
                        .SelectMany(_ => source)    
                        .Retry()
                        .Repeat();  //Loop
        }

然而,当我尝试在定期间隔后从我的客户端代码调用上述轮询时,我看到它一遍又一遍地重复相同的结果。它没有进展到表中的下一批记录。

客户端代码如下所示: -

private static void StreamDBDataWithThrottling()
        {
            var r = GetEmployees().ToObservable();

            r.Poll(TimeSpan.FromSeconds(2), Scheduler.Default)
                //.Take(20)
                // .Concat(Observable.Interval(TimeSpan.FromSeconds(0.01)).Take(100))
                .Buffer(20, 20)
                .TakeUntil(DateTimeOffset.Now.AddSeconds(15))
                .Subscribe((data) =>
                {
                    foreach (var item in data)
                    {
                        Console.WriteLine(item.FirstName);
                        // Todo: - Real Business Logic with Task.Factory.StartNew( _ => { // intensive task here } )
                    }
                });
        }

一旦处理开始,该表将不会有新数据进入。

我正在学习基于推送的集合和并发集合的注意事项。

如果您能指导我,请提前致谢 - 如何批量处理该表的所有记录,直至最后一条记录。

0 个答案:

没有答案