Improve on_read with worker