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