Я бы не использовал таймер для такой ситуации, потому что он может дать некоторую сложность. Что будет с вашими таймерами, если процесс будет перезапущен. Это не касается некоторых интернет-провайдеров, которые регулярно перезапускают процесс. Возможно, вы сталкиваетесь с подобной ситуацией.
Я бы добавил поле datetime для времени, когда вы берете продукт, и использовал бы его, чтобы узнать, доступен ли продукт или нет
Список доступных товаров будет заполнен «доступными» товарами и «взятыми», если их «взятый_время» меньше (текущее время - принятая задержка)
Я думаю, вам не нужно менять статус с помощью внешнего процесса, если вы правильно управляете им в своей бизнес-логике.
Надеюсь, это поможет
PS: простите за мой английский! Довольно поздно во Франции сейчас и мне трудно найти простой способ объяснить мою точку зрения: -)