@@ -14,20 +14,22 @@ public class AsyncBlockExpression : Expression
1414
1515 public ReadOnlyCollection < Expression > Expressions { get ; }
1616 public ReadOnlyCollection < ParameterExpression > Variables { get ; }
17+ public ExpressionRuntimeOptions RuntimeOptions { get ; }
1718
1819 internal LinkedDictionary < ParameterExpression , ParameterExpression > ScopedVariables { get ; set ; }
1920
2021 public Expression Result => Expressions [ ^ 1 ] ;
2122
22- internal AsyncBlockExpression ( ReadOnlyCollection < ParameterExpression > variables , ReadOnlyCollection < Expression > expressions )
23- : this ( variables , expressions , null )
23+ internal AsyncBlockExpression ( ReadOnlyCollection < ParameterExpression > variables , ReadOnlyCollection < Expression > expressions , ExpressionRuntimeOptions options = null )
24+ : this ( variables , expressions , null , options )
2425 {
2526 }
2627
2728 internal AsyncBlockExpression (
2829 ReadOnlyCollection < ParameterExpression > variables ,
2930 ReadOnlyCollection < Expression > expressions ,
30- LinkedDictionary < ParameterExpression , ParameterExpression > scopedVariables
31+ LinkedDictionary < ParameterExpression , ParameterExpression > scopedVariables ,
32+ ExpressionRuntimeOptions options = null
3133 )
3234 {
3335 if ( expressions == null || expressions . Count == 0 )
@@ -36,6 +38,7 @@ LinkedDictionary<ParameterExpression, ParameterExpression> scopedVariables
3638 Variables = variables ;
3739 Expressions = expressions ;
3840 ScopedVariables = scopedVariables ;
41+ RuntimeOptions = options ;
3942
4043 Type = GetTaskType ( Result . Type ) ;
4144 }
@@ -48,7 +51,7 @@ LinkedDictionary<ParameterExpression, ParameterExpression> scopedVariables
4851
4952 public override Expression Reduce ( )
5053 {
51- return _stateMachine ??= AsyncStateMachineBuilder . Create ( Result . Type , LoweringTransformer ) ;
54+ return _stateMachine ??= AsyncStateMachineBuilder . Create ( Result . Type , LoweringTransformer , RuntimeOptions ) ;
5255 }
5356
5457 private AsyncLoweringInfo LoweringTransformer ( )
@@ -78,7 +81,7 @@ protected override Expression VisitChildren( ExpressionVisitor visitor )
7881 if ( Compare ( newVariables , Variables ) && Compare ( newExpressions , Expressions ) )
7982 return this ;
8083
81- return new AsyncBlockExpression ( newVariables , newExpressions , ScopedVariables ) ;
84+ return new AsyncBlockExpression ( newVariables , newExpressions , ScopedVariables , RuntimeOptions ) ;
8285 }
8386
8487 internal static bool Compare < T > ( ICollection < T > compare , IReadOnlyList < T > current )
@@ -144,4 +147,24 @@ public static AsyncBlockExpression BlockAsync( ReadOnlyCollection<ParameterExpre
144147 {
145148 return new AsyncBlockExpression ( variables , expressions ) ;
146149 }
150+
151+ public static AsyncBlockExpression BlockAsync ( Expression [ ] expressions , ExpressionRuntimeOptions options )
152+ {
153+ return new AsyncBlockExpression ( ReadOnlyCollection < ParameterExpression > . Empty , new ReadOnlyCollection < Expression > ( expressions ) , options ) ;
154+ }
155+
156+ public static AsyncBlockExpression BlockAsync ( ParameterExpression [ ] variables , Expression [ ] expressions , ExpressionRuntimeOptions options )
157+ {
158+ return new AsyncBlockExpression ( new ReadOnlyCollection < ParameterExpression > ( variables ) , new ReadOnlyCollection < Expression > ( expressions ) , options ) ;
159+ }
160+
161+ public static AsyncBlockExpression BlockAsync ( ReadOnlyCollection < Expression > expressions , ExpressionRuntimeOptions options )
162+ {
163+ return new AsyncBlockExpression ( ReadOnlyCollection < ParameterExpression > . Empty , expressions , options ) ;
164+ }
165+
166+ public static AsyncBlockExpression BlockAsync ( ReadOnlyCollection < ParameterExpression > variables , ReadOnlyCollection < Expression > expressions , ExpressionRuntimeOptions options )
167+ {
168+ return new AsyncBlockExpression ( variables , expressions , options ) ;
169+ }
147170}
0 commit comments