|  | @@ -468,7 +468,7 @@ namespace System.Reactive.Linq.ObservableImpl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                      _hasValue[index] = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    if (_hasValueAll || (_hasValueAll = _hasValue.All(Stubs<bool>.I)))
 | 
	
		
			
				|  |  | +                    if (_hasValueAll || (_hasValueAll = All(_hasValue)))
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          var res = default(TResult);
 | 
	
		
			
				|  |  |                          try
 | 
	
	
		
			
				|  | @@ -484,7 +484,7 @@ namespace System.Reactive.Linq.ObservableImpl
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |                          _observer.OnNext(res);
 | 
	
		
			
				|  |  |                      }
 | 
	
		
			
				|  |  | -                    else if (_isDone.Where((x, i) => i != index).All(Stubs<bool>.I))
 | 
	
		
			
				|  |  | +                    else if (AllExcept(_isDone, index))
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          base._observer.OnCompleted();
 | 
	
		
			
				|  |  |                          base.Dispose();
 | 
	
	
		
			
				|  | @@ -508,7 +508,7 @@ namespace System.Reactive.Linq.ObservableImpl
 | 
	
		
			
				|  |  |                  {
 | 
	
		
			
				|  |  |                      _isDone[index] = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -                    if (_isDone.All(Stubs<bool>.I))
 | 
	
		
			
				|  |  | +                    if (All(_isDone))
 | 
	
		
			
				|  |  |                      {
 | 
	
		
			
				|  |  |                          base._observer.OnCompleted();
 | 
	
		
			
				|  |  |                          base.Dispose();
 | 
	
	
		
			
				|  | @@ -521,6 +521,35 @@ namespace System.Reactive.Linq.ObservableImpl
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +            private static bool All(bool[] values)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                foreach (var value in values)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    if (!value)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        return false;
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            private static bool AllExcept(bool[] values, int index)
 | 
	
		
			
				|  |  | +            {
 | 
	
		
			
				|  |  | +                for (var i = 0; i < values.Length; i++)
 | 
	
		
			
				|  |  | +                {
 | 
	
		
			
				|  |  | +                    if (i != index)
 | 
	
		
			
				|  |  | +                    {
 | 
	
		
			
				|  |  | +                        if (!values[i])
 | 
	
		
			
				|  |  | +                        {
 | 
	
		
			
				|  |  | +                            return false;
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +                return true;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |              private sealed class SourceObserver : IObserver<TSource>
 | 
	
		
			
				|  |  |              {
 | 
	
		
			
				|  |  |                  private readonly _ _parent;
 |