@@ -68,7 +68,7 @@ dynamic ContinuationFunction(Task<dynamic> task, dynamic state)
6868
6969 return request . ContinueWith
7070 (
71- continuationFunction : ( Func < Task < dynamic > , object , object > ) ContinuationFunction ,
71+ continuationFunction : ( Func < Task < dynamic > , object , object > ) ( ( task , state ) => ContinuationFunction ( task , state ) ) ,
7272 cancellationToken : cancellationToken ,
7373 continuationOptions : continuationOptions ,
7474 scheduler : scheduler ?? TaskScheduler . Default ,
@@ -105,7 +105,7 @@ dynamic ContinuationFunction(Task<dynamic> task, dynamic state)
105105
106106 return request . ContinueWith
107107 (
108- continuationFunction : ( Func < Task < dynamic > , object , object > ) ContinuationFunction ,
108+ continuationFunction : ( Func < Task < dynamic > , object , object > ) ( ( task , state ) => ContinuationFunction ( task , state ) ) ,
109109 cancellationToken : cancellationToken ,
110110 continuationOptions : continuationOptions ,
111111 scheduler : scheduler ?? TaskScheduler . Default ,
@@ -149,7 +149,7 @@ dynamic ContinuationFunction(Task<dynamic> task, dynamic state)
149149
150150 return request . ContinueWith
151151 (
152- continuationFunction : ( Func < Task < dynamic > , object , object > ) ContinuationFunction ,
152+ continuationFunction : ( Func < Task < dynamic > , object , object > ) ( ( task , state ) => ContinuationFunction ( task , state ) ) ,
153153 cancellationToken : cancellationToken ,
154154 continuationOptions : continuationOptions ,
155155 scheduler : scheduler ?? TaskScheduler . Default ,
@@ -189,7 +189,42 @@ dynamic ContinuationFunction(Task<dynamic> task, object state)
189189
190190 return request . ContinueWith
191191 (
192- continuationFunction : ( Func < Task < dynamic > , object , object > ) ContinuationFunction ,
192+ continuationFunction : ( Func < Task < dynamic > , object , object > ) ( ( task , state ) => ContinuationFunction ( task , state ) ) ,
193+ cancellationToken : cancellationToken ,
194+ continuationOptions : continuationOptions ,
195+ scheduler : scheduler ?? TaskScheduler . Default ,
196+ state : result
197+ ) ;
198+ }
199+
200+ public static Task < dynamic > Act < TResponse > ( this Task < dynamic > request ,
201+ Action < TResponse , dynamic > onResponse ,
202+ CancellationToken cancellationToken = default ,
203+ TaskContinuationOptions continuationOptions = TaskContinuationOptions . None ,
204+ TaskScheduler scheduler = null ) where TResponse : class
205+ {
206+ var result = request . AsyncState ?? request . Result ; // In the case of a faulted task and use the first to verify the result
207+
208+ dynamic ContinuationFunction ( Task < dynamic > task , object state )
209+ {
210+ if ( task . IsFaulted || task . IsCanceled )
211+ {
212+ bool . TryParse ( task . Exception ? . InnerException ? . Data [ ThrowOnExceptionKey ] ? . ToString ( ) , out var throwOnException ) ;
213+
214+ if ( throwOnException )
215+ throw task . Exception . ToFlatAggregateException ( throwOnException : true ) ;
216+
217+ return null ;
218+ }
219+
220+ onResponse ? . Invoke ( task . Result as TResponse , result ) ;
221+
222+ return state ;
223+ }
224+
225+ return request . ContinueWith
226+ (
227+ continuationFunction : ( Func < Task < dynamic > , object , object > ) ( ( task , state ) => ContinuationFunction ( task , state ) ) ,
193228 cancellationToken : cancellationToken ,
194229 continuationOptions : continuationOptions ,
195230 scheduler : scheduler ?? TaskScheduler . Default ,
@@ -220,7 +255,7 @@ T ContinuationFunction(Task<dynamic> task)
220255
221256 return request . ContinueWith
222257 (
223- continuationFunction : ContinuationFunction ,
258+ continuationFunction : task => ContinuationFunction ( task ) ,
224259 cancellationToken : cancellationToken ,
225260 continuationOptions : continuationOptions ,
226261 scheduler : scheduler ?? TaskScheduler . Default
@@ -253,7 +288,7 @@ TTo ContinuationFunction(Task<dynamic> task)
253288
254289 return request . ContinueWith
255290 (
256- continuationFunction : ContinuationFunction ,
291+ continuationFunction : task => ContinuationFunction ( task ) ,
257292 cancellationToken : cancellationToken ,
258293 continuationOptions : continuationOptions ,
259294 scheduler : scheduler ?? TaskScheduler . Default
@@ -286,7 +321,7 @@ TTo ContinuationFunction(Task<dynamic> task)
286321
287322 return request . ContinueWith
288323 (
289- continuationFunction : ContinuationFunction ,
324+ continuationFunction : task => ContinuationFunction ( task ) ,
290325 cancellationToken : cancellationToken ,
291326 continuationOptions : continuationOptions ,
292327 scheduler : scheduler ?? TaskScheduler . Default
0 commit comments