当一个let绑定跨过一个阻塞操作使用时,这个绑定就会从let中泄漏出来。
`
(async/go-loop []
(let [msg (async/<! in-ch)]
(if msg
(let [stuff (vec (range 1 100000))]
(async/<! out-ch stuff)
(println stuff)
(recur))
(recur))))
`
The {{stuff}}绑定卡在了状态机的状态中。这将在{{recur}}中持续,直到下一次遇到该绑定。
(在这个案例中,到那时已经积累了几GB的数据。)
理想情况下,当变量出作用域时,状态中表示本地变量的字段应该被置为null。