What I did is that my controller which listens for requests simply handles the request and persists the info in our DB. I have a recurring task that runs on its own every minute and queries the DB for any jobs that need to be run. It finds them and runs as many tasks as there are requests since the last run. In order to get around the hangfire limitation that 1 minute is the smallest interval between scheduled runs, when I receive a request for a job, I trigger the recurring task once I’ve persisted the request. What’s nice about it is that if it is already running it won’t do it again.