Я бы не использовал ID экземпляра. Что произойдет, если экземпляр 0 будет перезагружен (что происходит не реже одного раза в месяц)? Теперь ваш планировщик или исполнитель задач не в сети.
Альтернативным решением является использование типа мьютекса, который охватывает экземпляры. То, о чем я думаю, это аренда блобов. На самом деле вы можете получить в аренду блоб для записи (и может быть только один арендатор). Вы можете попытаться получить блоб в аренду перед запуском задачи. Если вы получили его, запустите задание. Если вы этого не сделаете, не запускайте его.
Небольшое отклонение: в потоке (скажем, начатом с вашего Run()
метода) попытайтесь получить аренду, а в случае успеха запустите задачу планировщика (возможно, поток или что-то в этом роде). Если вы не можете получить аренду, поспите минуту и попробуйте снова. В конце концов, экземпляр с арендой будет перезагружен (или исчезнет по какой-либо другой причине). Через несколько секунд другой экземпляр получит отмененную аренду и запустит новую задачу планировщика.
Стив Маркс написал сообщение в блоге о параллелизме с использованием аренды. У Тайлера Доерксена также есть хороший пост об аренде.