3

我真的很喜欢 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块,因为它需要在一个事务中进行删除和插入。

一个人能把它推到多远,要避免哪些陷阱?(我认为循环依赖可能存在问题,但我想不出一个例子......)

4

1 回答 1

1

交易被扁平化;在事务期间开始新事务不会做任何事情。IOW,要么在外部事务期间所有 ref 修改成功,要么重新启动整个外部事务。这意味着不应该存在依赖问题。

于 2012-11-19T08:18:36.143 回答