2 votes

Réagir aux changements dans System.Reactive

Je ne connais pas System.Reactive, mais si je comprends bien, on peut s'abonner à n'importe quelle collection observable et si quelque chose s'y passe, je suis notifié.

Mais comme je suis à la recherche d'un cadre de travail qui m'aide à planifier des tâches, ce serait énorme d'avoir une collection d'observables qui est déjà remplie de données, de les filtrer par temps et de faire en sorte qu'elles déclenchent l'événement onnext dès que certains critères sont remplis.

Disons que nous avons la classe

Public Class Appointment
    Property Notification As DateTime
End Class

et ensuite nous avons un List<IObservable> et on s'y abonne, puis on spécifie quelque chose comme une where mais pas lorsque quelque chose de nouveau est ajouté, mais lorsque quelque chose correspond. Dans ce cas, la date actuelle Now() et tout rendez-vous

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

Ou faut-il le faire avec un observable personnalisé ?

2voto

Richard Hein Points 6697

Vous pouvez faire quelque chose comme ça ... notez que vous devez mettre un indicateur sur le rendez-vous pour dire que la notification a été envoyée et l'ajouter à la clause where, sinon, une fois que l'heure du rendez-vous est < DateTime.Now, il continuera à envoyer le résultat encore et encore.

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; }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X