Один из способов реализовать этот шаблон в Shake:
rules = do
startService <- newCache $ \() -> do
... start the service here ...
runAfter $ ... shut down the service here ...
"*.txt" %> \out -> do
startService ()
... use the service here ...
Мы создаем кэшированный элемент с именем startService
.При использовании newCache
операция будет выполнена не более одного раза, только при необходимости.Мы можем запустить сервис, однако имеет смысл (даже потенциально сначала создать сервис).Мы используем runAfter
, чтобы закрыть службу, которая будет запущена после того, как Shake завершит свое выполнение.
Чтобы убедиться, что служба доступна в любом правиле, которое требуется, мы сначала вызываем startService ()
.
В качестве связанной функции, если у вас есть правило, в котором вам не нужен постоянный сервис, а есть только пакетные операции, см. Функцию batch
.