Return a coroutine instead of wrapping it in a callback

Other minor changes
* Rename reschedule to schedule.
* Add some comments
* Log errors