<PackageReference Include="System.Reactive" Version="6.0.0-preview.16" />
    
    
	
	
		
		
		
	 
	
	
        
                
                PushToPullAdapter<TSource, TResult>
                
                
                
                
using System.
Collections;
using System.
Collections.
Generic;
using System.
Runtime.
CompilerServices;
namespace System.
Reactive.
Linq.
ObservableImpl
{
    [
System.
Runtime.
CompilerServices.
NullableContext(
1)]
    [
System.
Runtime.
CompilerServices.
Nullable(
0)]
    
internal abstract class PushToPullAdapter<[
System.
Runtime.
CompilerServices.
Nullable(
2)] 
TSource, [
System.
Runtime.
CompilerServices.
Nullable(
2)] 
TResult> : 
IEnumerable<
TResult>, 
IEnumerable
    {
        
private readonly IObservable<
TSource> 
_source;
        
protected PushToPullAdapter(
IObservable<
TSource> 
source)
        {
            
_source = 
source;
        }
        
IEnumerator IEnumerable.
GetEnumerator()
        {
            
return GetEnumerator();
        }
        
public IEnumerator<
TResult> 
GetEnumerator()
        {
            
PushToPullSink<
TSource, 
TResult> 
pushToPullSink = 
Run();
            
pushToPullSink.
SetUpstream(
ObservableExtensions.
SubscribeSafe<
TSource>(
_source, (
IObserver<
TSource>)
pushToPullSink));
            
return pushToPullSink;
        }
        
protected abstract PushToPullSink<
TSource, 
TResult> 
Run();
    }
}