副作用のある関数を STM トランザクション内に配置することは、一般的に悪い習慣であることを認識しています。これらの関数は、再試行され、複数回呼び出される可能性があるためです。
ただし、エージェントを使用して、トランザクションが正常に完了した後にのみ副作用が実行されるようにすることができると思います。
例えば
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
これは良い習慣ですか?
長所/短所/落とし穴は何ですか?