我真的很喜欢STM,但我希望得到一些关于如何正确使用交易的建议,特别是当一个交易块依赖于另一个时
例如我有一些代码:
(defn unschedule-task [tt task-id] (dosync (doseq [entry .....] (tk/kill-all! (:task entry))) (v/delete! tt [[:task :id] task-id]))) (defn schedule-task [tt task schedule & [enabled? optt]] (dosync (unschedule-task tt (:id task)) (v/insert! tt {.....})))
基本上,unschedule-task
有一个dosync
块,schedule-task
在unschedule-task
块中调用dosync
,因为它需要删除和插入在一次交易中完成。
可以推动多远,避免哪些陷阱? (我认为可能存在循环依赖的问题,但是我无法想到一个例子......)
答案 0 :(得分:1)