J'essaie de courir ma tâche immédiatement, puis de l'exécuter par intervalle de temps.
J'ai écrit ce qui suit: 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. P> Comment ferais-je cela? P> p>
3 Réponses :
Essayez ceci:
Observable.Return(0).Concat(Observable.Interval(TimeSpan.FromSeconds(15))) .Subscribe(_ => MyTask());
Vous pouvez le faire:
var syncMailObservable = Observable .Interval(TimeSpan.FromSeconds(15.0), Scheduler.TaskPool) .StartWith(-1L); syncMailObservable.Subscribe(s => MyTask());
Spécifiez Scheduler.takpool dans l'intervalle et vous avez mon vote :)
@Paulbetts - J'ai ajouté le plancheduler.taskpool code> à
intervalle code>, mais pourquoi
plancheduler.takpool code> mieux que le planificateur
par défaut. Threadpool code>?
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 code> pour cette raison. À votre santé.
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. P> https://msdn.microsoft.com/en-us/library/hh229652 (v = vs.103 ) .aspx p> p>