Вы можете использовать это:
var finalResult =
initResult
.Select(ir =>
Observable.If(() => ir, connectResult, Observable.Return(false)))
.Merge();
Чтобы получать свои сообщения, вы можете изменить его следующим образом:
var initResultText =
initResult
.Select(ir =>
ir ? (string)null : "Initialization failed thus connection failed.");
var connectResultText =
connectResult
.Select(cr =>
String.Format("Connection {0}.", cr ? "succeeded" : "failed"));
var finalResult =
initResultText
.Select(irt =>
Observable.If(() =>
irt == null, connectResultText, Observable.Return(irt)))
.Merge();
Если вам нужно вложить больше, чем это, вы должны рассмотретьсоздание метода расширения, который оборачивает сложность и, следовательно, композицию, будет намного проще.