当一个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))))
`
{{stuff}}绑定会卡在状态机状态中。这将在{{recur}}期间持续存在,直到遇到该绑定。
((在我们这个例子中,那时已经积累了几个GB。))
理想情况下,在状态中表示本地变量的字段在变量超出作用域时会被置为null。