Answers

Observable.Let is used to compose an observable while sharing creation side-effects. For example, if x is defined as var x = GetObservable(), then you could just use GetObservable().Concat(GetObservable()) instead. But GetObservable() would have to be executed twice. Or, you could use Observable.Let to bind the result of GetObservable() to a variable and then reuse the variable: GetObservable().Let(x => x.Concat(x)).

You could essentially do this with a local variable instead if you're writing imperative code:

var ob = GetObservable();
ob = ob.Concat(ob);

But what if you're not writing imperative code? It's harder to do this in the middle of a LINQ query. That's where Observable.Let really shines.

Observable.Let is used to compose an observable while sharing creation side-effects. For example, if x is defined as var x = GetObservable(), then you could just use GetObservable().Concat(GetObservable()) instead. But GetObservable() would have to be executed twice. Or, you could use Observable.Let to bind the result of GetObservable() to a variable and then reuse the variable: GetObservable().Let(x => x.Concat(x)).

You could essentially do this with a local variable instead if you're writing imperative code:

var ob = GetObservable();
ob = ob.Concat(ob);

But what if you're not writing imperative code? It's harder to do this in the middle of a LINQ query. That's where Observable.Let really shines.