Я сделал что-то похожее, и решил это, имея постоянную очередь (таблицу SQL Server), в которой будет храниться удаленный Uri вместе с интервалом и DateTime для последнего запуска.
Затем я могу получить все записи, которые я хочу запустить, выбрав те, которые имеют lastRun + interval
Если ваш наименьший интервал находится в диапазоне секунд, вы, вероятно, захотите использовать ThreadPool, чтобы вы могли выполнить несколько запросов одновременно. (Не забудьте соответствующим образом настроить параметр maxConnections в файле app.config).
Я бы использовал одну службу Windows (для этого взгляните на проект TopShelf), и тогда бы Quartz.Net запускал задания. С помощью Quartz вы можете контролировать необходимость завершения предыдущих заданий и т. Д.