Soy consciente de que generalmente es una mala práctica poner funciones con efectos secundarios en las transacciones de STM, ya que se pueden volver a intentar y llamar varias veces.Uso de agentes para completar efectos secundarios en transacciones de STM
Sin embargo, se me ocurre que podría usar agentes para garantizar que los efectos secundarios se ejecuten solo después de que la transacción se complete satisfactoriamente.
p. Ej.
(dosync
// transactional stuff
(send some-agent #(function-with-side-effects params))
// more transactional stuff
)
¿Es esta una buena práctica?
¿Cuáles son los pros/contras/trampas?
Una de las ideas centrales de STM es la atomicidad de fallas. ¿Cómo ayudaría esto con eso? –
El punto es por los efectos secundarios que deben ocurrir después de que una transacción tiene éxito pero no son parte de la transacción, p. enviando un correo electrónico de confirmación. Claramente, no desea hacer esto cada vez que la transacción reintenta o de lo contrario podría obtener un destinatario muy enojado/confundido. – mikera