What are the benefits of recursive scheduling in System.Reactive?

I'm current reading http://www.introtorx.com/ and I'm getting really interested in stripping Subject<T> out of my reactive code. I'm starting to understand how to encapsulate sequence generation so that I can reason better about a given sequence. I read a few SO questions and ended up reading about scheduling. Of particular interest is recursive scheduling, using the Schedule(this IScheduler scheduler, Action<T>, Action<Action<T>>)overloads.

The book is starting to show its age in a few areas, and the biggest i see is that it never compares its techniques to alternatives that may be achieved using the Task and async/await language features. I always end up feeling like I could write less code by ignoring the book advice and using the asynchronous toys, but the back of my mind nags me about being lazy and not learning the pattern properly.

With that, here is my question. If I wanted to schedule a sequence at an interval, support cancellation and perform work on a background thread, I might do this:

var cancellation = new CancellationTokenSource();
Observable.Create(async () =>
{
    for(;;)
    {
        await Task.Delay(1000, cancellation.Token);
        await DoWork(cancellation.Token);
    }
}

What are the limitations and pitfalls here? What are the reasons that you might prefer to use recursive scheduling?