Read this article on three different occasions to understand its intent. It finally clicked when I read this:
"...co-routines save the control state of a function between calls. Kinda like recursion - you know exactly where are you going to return after a function call...When you call a co-routine, it doesn’t start all over from the beginning. Rather, it starts from right after where it returned (yielded control) the previous time it was called."
Source:http://eli.thegreenplace.net/2009/08/29/co-routines-as-an-alternative-to-state-machines/