github/Shimmer — pull request #23 by xpaulbettsx (2012-10-01 22:14:09+00:00)
Title: Clean up how methods return progress

The notion of using an IObservable as the return value for methods that return progress makes client code *really* ugly. Let's separate these two.

Before, the pattern was:

```cs
public IObservable somethingThatReturnsProgress();
```

Now, it's:

```cs
public IObservable somethingThatReturnsProgress(IObserver progress = null);
```

The idea being, that if you don't care about progress, don't pass in anything, but otherwise, pass in an `IObserver` that will have progress values played onto it. The easiest way to do this would be to use a `Subject`:

```cs
var progress = new Subject();
progress.Subscribe(x => setProgress(x));

somethingThatReturnsProgress(progress);
```