I dislike this because it means the user *has* to spawn a separate goroutine for reading errors or risk deadlock. Ideally async messages would be written to a channel so that the user has the option to select on reading errors or writing messages within the same goroutine.