ReactiveCocoa/ReactiveCocoa — pull request #302 by jspahrsummers (2013-02-03 19:54:48+00:00)
Title: RACSignalCommand

This started out as an attempt to replace [RACAsyncCommand](https://github.com/ReactiveCocoa/ReactiveCocoa/commit/1e7986eda6c518a5638fb9f16f6f8b3df2aef174), but ended up as something much more general.

`RACSignalCommand` is basically a command that allows you to "inject" a signal into the command's event stream, but with the option to avoid blocking the thread that `-execute:` is invoked upon. One example use case involves using `RACSignalCommand.executing` to show a loading spinner and disable a button while you kick off a network request.

**Notable differences between `RACSignalCommand` and [ReactiveAsyncCommand](https://github.com/reactiveui/ReactiveUI/blob/master/ReactiveUI.Xaml/ReactiveAsyncCommand.cs)** (upon which `RACAsyncCommand` was based):

* There's no concept of multiple in-flight executions. You're either executing or you're not, and `-execute:` can't be invoked again until you're done.
* There's no way to add work after initialization. This always felt very imperative to me, and doesn't seem like a necessary feature.
* The signal returned from `signalBlock` _replaces_ the command's normal stream of values. Instead of forwarding `sender` to all subscribers, `RACSignalCommand` forwards the values (and any errors) from the instantiated signal.

@xpaulbettsx I'd love to get your thoughts on this interface too, since you wrote the inspiration.