<PackageReference Include="System.Reactive" Version="6.0.0-preview.1" />
    
	
	
		
		
		
	 
	
	
        
                
                Plan<T1, T2, TResult>
                
                    sealed class Plan<
T1, 
T2, 
TResult> : 
Plan<
TResult>
                
 
                
                
                
using System.
Collections.
Generic;
using System.
Runtime.
CompilerServices;
namespace System.
Reactive.
Joins
{
    [
System.
Runtime.
CompilerServices.
NullableContext(
1)]
    [
System.
Runtime.
CompilerServices.
Nullable(
new byte[] {
        
0,
        
1
    })]
    
internal sealed class Plan<[
System.
Runtime.
CompilerServices.
Nullable(
2)] 
T1, [
System.
Runtime.
CompilerServices.
Nullable(
2)] 
T2, [
System.
Runtime.
CompilerServices.
Nullable(
2)] 
TResult> : 
Plan<
TResult>
    {
        
internal Pattern<
T1, 
T2> 
Expression { get; }
        
internal Func<
T1, 
T2, 
TResult> 
Selector { get; }
        
internal Plan(
Pattern<
T1, 
T2> 
expression, 
Func<
T1, 
T2, 
TResult> 
selector)
        {
            
Expression = 
expression;
            
Selector = 
selector;
        }
        
internal override ActivePlan Activate(
Dictionary<
object, 
IJoinObserver> 
externalSubscriptions, 
IObserver<
TResult> 
observer, 
Action<
ActivePlan> 
deactivate)
        {
            
IObserver<
TResult> 
observer2 = 
observer;
            
Action<
Exception> 
onError = 
observer2.
OnError;
            
JoinObserver<
T1> 
firstJoinObserver = 
Plan<
TResult>.
CreateObserver(
externalSubscriptions, 
Expression.
First, 
onError);
            
JoinObserver<
T2> 
secondJoinObserver = 
Plan<
TResult>.
CreateObserver(
externalSubscriptions, 
Expression.
Second, 
onError);
            
ActivePlan<
T1, 
T2> 
activePlan = 
null;
            
activePlan = 
new ActivePlan<
T1, 
T2>(
firstJoinObserver, 
secondJoinObserver, 
delegate(
T1 first, 
T2 second) {
                
TResult value;
                
try {
                    
value = 
Selector(
first, 
second);
                } 
catch (
Exception error) {
                    
observer.
OnError(
error);
                    
return;
                }
                
observer.
OnNext(
value);
            }, 
delegate {
                
firstJoinObserver.
RemoveActivePlan(
activePlan);
                
secondJoinObserver.
RemoveActivePlan(
activePlan);
                
deactivate(
activePlan);
            });
            
firstJoinObserver.
AddActivePlan(
activePlan);
            
secondJoinObserver.
AddActivePlan(
activePlan);
            
return activePlan;
        }
    }
}