我真的很喜欢 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块,因为它需要在一个事务中进行删除和插入。
一个人能把它推到多远,要避免哪些陷阱?(我认为循环依赖可能存在问题,但我想不出一个例子......)