11
votes

Accélérateur réactif renvoyant tous les articles ajoutés dans la trajectoire

donné un iobservable existe un moyen d'utiliser le comportement (réinitialiser une minuterie lorsqu'un élément est ajouté, mais a-t-il renvoyer une collection de tous les articles ajoutés dans ce temps?

tampon fournit une fonctionnalité similaire qu'elle a chunk les données dans ilist sur chaque fois ou compte. Mais j'ai besoin de ce moment pour réinitialiser chaque fois qu'un élément est ajouté.

J'ai vu une question similaire ici, Les extensions réactives soutiennent-elles des tampons de roulement? < / a>, mais les réponses ne semblent pas idéales et c'est un peu vieux, alors je me demandais si la version de la version de Rx-Main prend maintenant en charge cette fonctionnalité.


3 commentaires

Il ressemble à mon tamponwithinactivité réponse à Stackoverflow.com/a/7604825/259769 est ce que vous 'RE Demander. Pouvez-vous clarifier votre question s'il vous plaît?


@Enigmativitity C'est, ce sont exactement la fonctionnalité que je suis après. J'ai réfléchi à cette question dans ma question :) Mais je n'aime pas cette réponse, le répondeur a explicitement indiqué que c'est un travail en cours.


Je ne sais pas ce que vous demandez. Si la minuterie reçoit la réinitialisation à chaque fois qu'un élément est "ajouté" (propagé?) Comment va-t-il faire tamponner en premier lieu?


3 Réponses :


0
votes

1 commentaires

Nope, le composant temporel va frapper immédiatement et tamponner tout jusqu'à ce temps écoulé, et le compte buffera Nombre d'articles. J'ai besoin du temps de mémoire tampon pour réinitialiser lorsqu'un élément est ajouté (comme un papillon).



13
votes

Comme i répondit dans l'autre poste , oui vous pouvez! Utilisation de la fenêtre code> code> et Fenêtre code> Méthodes de Observable code>:

public static IObservable<IList<T>> BufferUntilInactive<T>(this IObservable<T> stream, TimeSpan delay)
{
    var closes = stream.Throttle(delay);
    return stream.Window(() => closes).SelectMany(window => window.ToList());
}


1 commentaires

Bonne réponse! Mais ne devrait-on pas publier le flux à l'aide de retour flux.Publish (Hot => ... ), pour éviter de vous abonner à des observables à froid?



3
votes

J'ai modifié le colonel Panic's bufferuntilinactif code> opérateur en ajoutant un Publier code > Composant, de sorte qu'il fonctionne correctement avec les observables à froid aussi:

/// <summary>Projects each element of an observable sequence into consecutive
/// non-overlapping buffers, which are produced based on time and activity.</summary>
public static IObservable<IList<T>> BufferUntilInactive<T>(
    this IObservable<T> source, TimeSpan dueTime)
{
    return source.Publish(published =>
        published
            .Window(() => published.Throttle(dueTime))
            .SelectMany(window => window.ToList())
    );
}


0 commentaires