2

System.Reactiveは初めてですが、私はこのすべてを理解しているので、監視可能なコレクションをサブスクライブでき、そこで何かが発生した場合は通知を受け取ります。

しかし、タスクのスケジューリングに役立つフレームワークを探しているので、すでにデータでいっぱいになっている監視可能なコレクションを用意し、それらを時間でフィルタリングして、いくつかの基準が一致するとすぐに次のイベントを発生させるのは非常に大きなことです。 。

クラスがあるとしましょう

Public Class Appointment
    Property Notification As DateTime
End Class

次に、があり、List<IObservable>それをサブスクライブします。次に、where何かが追加されたときではなく、何かが一致したときに、のようなものを指定します。この場合、現在の日時Now()と予定

src.WhenWhere(x => x.Notification < Now())

または、これはカスタムオブザーバブルを使用して実行する必要がありますか?

4

1 に答える 1

2

このようなことを行うことができます...通知が送信されたことを示すために予定にフラグを付けてwhere句に追加する必要があることに注意してください。そうしないと、予定時刻が<DateTime.Nowになると、結果を何度も何度も送信し続けます。

void Main() {
    var appointments = new List<Appointment> { 
       new Appointment { Id = 1, Notification = DateTime.Now.AddMilliseconds(4000) },
       new Appointment { Id = 2, Notification = DateTime.Now.AddMilliseconds(7000) }
    };

    var q = from t in Observable.Generate(DateTime.Now, _ => true, _ => _, _ => DateTime.Now, _ => TimeSpan.FromSeconds(1))
        from a in appointments
        where a.Notification < t
        select new { a.Id, a.Notification };

q.Dump();

}

public class Appointment {
    public int Id { get; set; }
    public DateTime Notification { get; set; }
}
于 2013-01-02T21:34:22.577 に答える