wrap user connected/disconnected callbacks in their own fibers, so that they do not block one another