当一个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。