The main issue here is that by capturing ExecutionContext we also keep around every `AsyncLocal` at the moment, keeping them alive forever.