I have a method returning an `IObservable<long>` that I call from an `async` method. I want to convert this into a normal `List<long>`, but to have that operation be cancelled if my `CancellationToken` is signaled. 

I would like to do something like this:

```
List<long> result = await Foo().ToList(myCancellationToken);

```

What is the correct (and simplest) way to accomplish this? The `ToList()` extension method of `IObservable<T>` returns an `IObservable<List<T>>` and does not take a `CancellationToken` parameter.