Я знаю, что, как правило, нежелательно размещать функции с побочными эффектами в транзакциях STM, поскольку они потенциально могут быть повторены и вызваны несколько раз.
Однако мне приходит в голову, что вы можете использовать агенты, чтобы гарантировать выполнение побочных эффектов только после успешного завершения транзакции.
e.g.
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
Это хорошая практика?
Какие плюсы/минусы/подводные камни?