@@ -132,6 +132,14 @@ private static void BuildMethod(TypeBuilder type, MethodInfo interfaceMethodInfo
132
132
methodBuilder . DefineGenericParameters ( genericTypeNames ) ;
133
133
}
134
134
135
+ // Check to see if the last parameter of the method is a CancellationToken
136
+ bool hasCancellationToken = paramTypes . LastOrDefault ( ) == typeof ( CancellationToken ) ;
137
+ if ( hasCancellationToken )
138
+ {
139
+ // remove CancellationToken from input paramTypes
140
+ paramTypes = paramTypes . Take ( paramTypes . Length - 1 ) . ToArray ( ) ;
141
+ }
142
+
135
143
var generator = methodBuilder . GetILGenerator ( ) ;
136
144
137
145
// Declare local variable to store the arguments to IClientProxy.SendCoreAsync
@@ -145,7 +153,7 @@ private static void BuildMethod(TypeBuilder type, MethodInfo interfaceMethodInfo
145
153
generator . Emit ( OpCodes . Ldstr , interfaceMethodInfo . Name ) ;
146
154
147
155
// Create an new object array to hold all the parameters to this method
148
- generator . Emit ( OpCodes . Ldc_I4 , parameters . Length ) ; // Stack:
156
+ generator . Emit ( OpCodes . Ldc_I4 , paramTypes . Length ) ; // Stack:
149
157
generator . Emit ( OpCodes . Newarr , typeof ( object ) ) ; // allocate object array
150
158
generator . Emit ( OpCodes . Stloc_0 ) ;
151
159
@@ -162,8 +170,16 @@ private static void BuildMethod(TypeBuilder type, MethodInfo interfaceMethodInfo
162
170
// Load parameter array on to the stack.
163
171
generator . Emit ( OpCodes . Ldloc_0 ) ;
164
172
165
- // Get 'CancellationToken.None' and put it on the stack, since we don't support CancellationToken right now
166
- generator . Emit ( OpCodes . Call , CancellationTokenNoneProperty . GetMethod ) ;
173
+ if ( hasCancellationToken )
174
+ {
175
+ // Get CancellationToken from input argument and put it on the stack
176
+ generator . Emit ( OpCodes . Ldarg , paramTypes . Length + 1 ) ;
177
+ }
178
+ else
179
+ {
180
+ // Get 'CancellationToken.None' and put it on the stack, for when method does not have CancellationToken
181
+ generator . Emit ( OpCodes . Call , CancellationTokenNoneProperty . GetMethod ) ;
182
+ }
167
183
168
184
// Send!
169
185
generator . Emit ( OpCodes . Callvirt , invokeMethod ) ;
0 commit comments