title: RxJava resilent way to combine multiple observables
body: <p>I have multiple modules that return Observables: <code>O1, O2, O3... On</code>
  The result of all modules should be combined into one observable <code>Ocomb</code> so that individual tasks can fail but the combination is not terminated or influenced by individual issues.
  With my current solution I'm encountering various problems as in the following example:</p>
  
  <p>This code combines the output of my modules:</p>
  
  <pre><code>public Observable&lt;Data&gt; getModuleData(){
      List&lt;Observable&lt;Data&gt;&gt; tasks = new ArrayList&lt;&gt;();
      for(MyModule module : modules){
          tasks.add(module.getData());
      }
      return Observable
              .mergeDelayError(Observable.from(tasks))
              .onBackpressureBuffer(MAX_BUFFER)
              .observeOn(AndroidSchedulers.mainThread());
  }
  </code></pre>
  
  <p>Now, I want to display attribute <code>X</code> e.g. <code>'name'</code> of all emitted data objects:</p>
  
  <pre><code>public List&lt;String&gt; getNames() {
      return  getModuleData() 
              .map(new Func1&lt;Data, String&gt;() {
                  @Override
                  public String call(Data data) {
                      return data.getName();
                  }
              })
              .timeout(600, TimeUnit.MILLISECONDS)
              .toList()
              .toBlocking()
              .firstOrDefault(new ArrayList&lt;String&gt;());
  }
  </code></pre>
  
  <p>The <code>getNames()</code> method should return a list and therefore block the execution.</p>
  
  <p><strong>Problem 1</strong>
  It seems there is an <a href="https://github.com/ReactiveX/RxAndroid/issues/50" rel="nofollow">issue</a> in RxJava that if I call <code>observeOn()</code> and make it blocking it will not return no matter what timeout etc are saying.</p>
  
  <p><strong>Problem 2</strong>
  If <code>onObserve()</code> is removed, the code will work but in a different place of the app I'm rendering the results of the non-blocking observable in the UI. Data will be displayed but afterwards my UI does crazy stuff. I have to touch my UI list component to refresh the screen every time data changes.</p>
  
  <p><strong>Problem 3</strong>
  Some of the modules might create internal errors or will not call <code>onCompleted()</code>. I thought that a combination of <code>mergeDelayError()</code> and <code>timeout()</code> could handle these cases and call <code>onCompleted()</code> for unresponsive modules. However, if one of the modules does not call <code>onCompleted()</code> and the <code>timeout()</code> statement is removed the blocking call will never return.</p>
  
  <p><strong>Questions:</strong></p>
  
  <p><strong>What is the best way to combine multiple observable so that individual observables can fail but it's handled as <code>onCompleted()</code> / ignored and does not affect the combined observable?</strong> </p>
  
  <p>What is the best solution to make the combined observable blocking and handle the timeout without stopping the execution or ending up in a loop?</p>