8
votes

Démarrer la tâche à une fois par intervalle de temps à l'aide de RX Cadre

J'essaie de courir ma tâche immédiatement, puis de l'exécuter par intervalle de temps. J'ai écrit ce qui suit: xxx

Le problème est que la tâche ne commence que après les 15 secondes. Je dois exécuter ma tâche au début, puis continuer par intervalle de temps.

Comment ferais-je cela?


0 commentaires

3 Réponses :


3
votes

Essayez ceci:

Observable.Return(0).Concat(Observable.Interval(TimeSpan.FromSeconds(15)))
.Subscribe(_ => MyTask());


0 commentaires

14
votes

Vous pouvez le faire:

var syncMailObservable =
    Observable
        .Interval(TimeSpan.FromSeconds(15.0), Scheduler.TaskPool)
        .StartWith(-1L);
syncMailObservable.Subscribe(s => MyTask());


4 commentaires

Spécifiez Scheduler.takpool dans l'intervalle et vous avez mon vote :)


@Paulbetts - J'ai ajouté le plancheduler.taskpool à intervalle , mais pourquoi plancheduler.takpool mieux que le planificateur par défaut. Threadpool ?


Le planificateur réel n'est pas important, mais il est généralement judicieux de toujours spécifier un planificateur explicite afin qu'il soit clair que ce code fonctionnera dans un autre contexte. Si vous utilisez des tests unitaires, vous souhaitez généralement utiliser votre propre variable globale (comme Rxapp.taskpoolschéduler de Reactiveui », de sorte que plus tard dans un test unitaire, vous pouvez le remplacer par un testchédulgleur


@Paulbetts - Assez juste. J'ai tendance à écrire la plupart de mes méthodes d'extension et de bibliothèques avec un ISCHEDULER pour cette raison. À votre santé.



2
votes

Cette question fait référence à la méthode d'intervalle spécifiquement, mais la méthode de la minuterie peut être utilisée pour l'accomplir proprement.

La méthode de la minuterie prend en charge un délai initial (temps voulu). La définition comme une durée de zéro doit démarrer la tâche à la fois, puis l'exécuter à chaque intervalle. xxx

https://msdn.microsoft.com/en-us/library/hh229652 (v = vs.103 ) .aspx


0 commentaires