私はSTMが本当に好きですが、特にトランザクションの1つのブロックが別のブロックに依存している場合に、トランザクションを適切に使用する方法についてアドバイスをもらいたいと思っています。
たとえば、私はいくつかのコードを持っています:
(defn unschedule-task [tt task-id]
(dosync
(doseq[エントリ.....]
(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ブロックがあり、1つのトランザクションで実行するには削除と挿入の両方が必要なため、独自のブロックをschedule-task呼び出します。unschedule-taskdosync
これをどこまで推し進めることができ、避けるべき落とし穴は何ですか?(循環依存に問題があるかもしれないと思っていますが、頭のてっぺんから例を考えることはできません...)