@@ -49,66 +49,55 @@ public void UpdateResponseContentType(IRequest httpReq, object response)
4949 }
5050 }
5151
52- public Task HandleResponse ( object response , Func < object , Task > callback )
52+ public async Task HandleResponse ( object response , Func < object , Task > callback )
5353 {
5454 try
5555 {
56- var taskResponse = response as Task ;
57- if ( taskResponse != null )
56+ if ( response is Task taskResponse )
5857 {
5958 if ( taskResponse . Status == TaskStatus . Created )
6059 {
6160 taskResponse . Start ( ) ;
6261 }
6362
64- return taskResponse
65- . Continue ( task =>
66- {
67- if ( task . IsFaulted )
68- return task ;
69-
70- if ( task . IsCanceled )
71- return new OperationCanceledException ( "The async Task operation was cancelled" ) . AsTaskException ( ) ;
72-
73- if ( task . IsCompleted )
74- {
75- var taskResult = task . GetResult ( ) ;
76-
77- var taskResults = taskResult as Task [ ] ;
78-
79- if ( taskResults == null )
80- {
81- var subTask = taskResult as Task ;
82- if ( subTask != null )
83- taskResult = subTask . GetResult ( ) ;
84-
85- return callback ( taskResult ) ;
86- }
87-
88- if ( taskResults . Length == 0 )
89- return callback ( TypeConstants . EmptyObjectArray ) ;
90-
91- var firstResponse = taskResults [ 0 ] . GetResult ( ) ;
92- var batchedResponses = firstResponse != null
93- ? ( object [ ] ) Array . CreateInstance ( firstResponse . GetType ( ) , taskResults . Length )
94- : new object [ taskResults . Length ] ;
95- batchedResponses [ 0 ] = firstResponse ;
96- for ( var i = 1 ; i < taskResults . Length ; i ++ )
97- {
98- batchedResponses [ i ] = taskResults [ i ] . GetResult ( ) ;
99- }
100- return callback ( batchedResponses ) ;
101- }
102-
103- return new InvalidOperationException ( "Unknown Task state" ) . AsTaskException ( ) ;
104- } ) ;
63+ await taskResponse ;
64+ var taskResult = taskResponse . GetResult ( ) ;
65+
66+ if ( ! ( taskResult is Task [ ] taskResults ) )
67+ {
68+ if ( taskResult is Task subTask )
69+ taskResult = subTask . GetResult ( ) ;
70+
71+ await callback ( taskResult ) ;
72+ return ;
73+ }
74+
75+ if ( taskResults . Length == 0 )
76+ {
77+ await callback ( TypeConstants . EmptyObjectArray ) ;
78+ return ;
79+ }
80+
81+ var firstResponse = taskResults [ 0 ] . GetResult ( ) ;
82+ var batchedResponses = firstResponse != null
83+ ? ( object [ ] ) Array . CreateInstance ( firstResponse . GetType ( ) , taskResults . Length )
84+ : new object [ taskResults . Length ] ;
85+
86+ batchedResponses [ 0 ] = firstResponse ;
87+ for ( var i = 1 ; i < taskResults . Length ; i ++ )
88+ {
89+ batchedResponses [ i ] = taskResults [ i ] . GetResult ( ) ;
90+ }
91+
92+ await callback ( batchedResponses ) ;
93+ return ;
10594 }
10695
107- return callback ( response ) ;
96+ await callback ( response ) ;
10897 }
10998 catch ( Exception ex )
11099 {
111- return ex . AsTaskException ( ) ;
100+ throw ;
112101 }
113102 }
114103
0 commit comments