http://code.naeseth.com/swirl/
However, if your async call actually happens somewhere in a library function, you have to yield also calling that function - it's not transparent for the caller whether the library function is synchronous or not.