set async_result value to fix a leak; adjust some timer factor based on channel load
io.feed just trigger event once, so we use io.feed(write_event) instead of greenlet.spawn again