我真的很喜欢 STM,但我希望得到一些关于如何正确使用事务的建议,尤其是当一个事务块依赖于另一个事务块时
例如我有一些代码:
(defn unschedule-task [tt task-id] (同步 (剂量 [条目.....] (tk/kill-all! (:task entry))) (v/delete! tt [[:task :id] task-id]))) (defn schedule-task [tt 任务计划 & [启用?optt]] (同步 (未计划任务 tt(:id 任务)) (v/插入!tt {.....})))
基本上,unschedule-task
有一个dosync
块,并schedule-task
调用unschedule-task
自己的dosync
块,因为它需要在一个事务中进行删除和插入。
一个人能把它推到多远,要避免哪些陷阱?(我认为循环依赖可能存在问题,但我想不出一个例子......)