I found that I can set the task to run at specific interval at specific times from here, but that was only done during task declaration. How do I set a task to run periodically dynamically?
Share
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
The schedule is derived from a setting, and thus seems to be immutable at runtime.
You can probably accomplish what you’re looking for using Task ETAs. This guarantees that your task won’t run before the desired time, but doesn’t promise to run the task at the designated time—if the workers are overloaded at the designated ETA, the task may run later.
If that restriction isn’t an issue, you could write a task which would first run itself like:
The major downside of this approach is that you are relying on the taskstore to remember the tasks in flight. If one of them fails before firing off the next one, then the task will never run again. If your broker isn’t persisted to disk and it dies (taking all in-flight tasks with it), then none of those tasks will run again.
You could solve these issues with some kind of transaction logging and a periodic “nanny” task whose job it is to find such repeating tasks that died an untimely death and revive them.
If I had to implement what you’ve described, I think this is how I would approach it.