@@ -15,7 +15,7 @@ public class Connection : IConnection
15
15
{
16
16
const int BUFFER_SIZE = 1024 ;
17
17
18
- private IConnectionSettings _ConnectionSettings { get ; set ; }
18
+ protected IConnectionSettings _ConnectionSettings { get ; set ; }
19
19
private Semaphore _ResourceLock ;
20
20
private readonly bool _enableTrace ;
21
21
@@ -227,17 +227,13 @@ protected virtual Task<ConnectionStatus> DoAsyncRequest(HttpWebRequest request,
227
227
}
228
228
try
229
229
{
230
- return Task . Factory . StartNew ( ( ) =>
231
- {
232
- using ( var tracer = new ConnectionStatusTracer ( this . _ConnectionSettings . TraceEnabled ) )
233
- {
230
+ //return Task.Factory.StartNew(() =>
231
+ //{
232
+
234
233
this . Iterate ( this . _AsyncSteps ( request , tcs , data ) , tcs ) ;
235
- var cs = tcs . Task . Result ;
236
- tracer . SetResult ( cs ) ;
237
- _ConnectionSettings . ConnectionStatusHandler ( cs ) ;
238
- return cs ;
239
- }
240
- } , TaskCreationOptions . LongRunning ) ;
234
+ return tcs . Task ;
235
+
236
+ //}, TaskCreationOptions.LongRunning);
241
237
}
242
238
finally
243
239
{
@@ -247,55 +243,60 @@ protected virtual Task<ConnectionStatus> DoAsyncRequest(HttpWebRequest request,
247
243
248
244
private IEnumerable < Task > _AsyncSteps ( HttpWebRequest request , TaskCompletionSource < ConnectionStatus > tcs , string data = null )
249
245
{
250
- var timeout = this . _ConnectionSettings . Timeout ;
251
-
252
- var state = new ConnectionState { Connection = request } ;
253
-
254
- if ( data != null )
246
+ using ( var tracer = new ConnectionStatusTracer ( this . _ConnectionSettings . TraceEnabled ) )
255
247
{
256
- var getRequestStream = Task . Factory . FromAsync < Stream > ( request . BeginGetRequestStream , request . EndGetRequestStream , null ) ;
257
- ThreadPool . RegisterWaitForSingleObject ( ( getRequestStream as IAsyncResult ) . AsyncWaitHandle , ThreadTimeoutCallback , request , timeout , true ) ;
258
- yield return getRequestStream ;
248
+ var timeout = this . _ConnectionSettings . Timeout ;
259
249
260
- var requestStream = getRequestStream . Result ;
261
- try
262
- {
263
- byte [ ] buffer = Encoding . UTF8 . GetBytes ( data ) ;
264
- var writeToRequestStream = Task . Factory . FromAsync ( requestStream . BeginWrite , requestStream . EndWrite , buffer , 0 , buffer . Length , state ) ;
265
- yield return writeToRequestStream ;
266
- }
267
- finally
250
+ var state = new ConnectionState { Connection = request } ;
251
+
252
+ if ( data != null )
268
253
{
269
- requestStream . Close ( ) ;
254
+ var getRequestStream = Task . Factory . FromAsync < Stream > ( request . BeginGetRequestStream , request . EndGetRequestStream , null ) ;
255
+ //ThreadPool.RegisterWaitForSingleObject((getRequestStream as IAsyncResult).AsyncWaitHandle, ThreadTimeoutCallback, request, timeout, true);
256
+ yield return getRequestStream ;
257
+
258
+ var requestStream = getRequestStream . Result ;
259
+ try
260
+ {
261
+ byte [ ] buffer = Encoding . UTF8 . GetBytes ( data ) ;
262
+ var writeToRequestStream = Task . Factory . FromAsync ( requestStream . BeginWrite , requestStream . EndWrite , buffer , 0 , buffer . Length , state ) ;
263
+ yield return writeToRequestStream ;
264
+ }
265
+ finally
266
+ {
267
+ requestStream . Close ( ) ;
268
+ }
270
269
}
271
- }
272
270
273
- // Get the response
274
- var getResponse = Task . Factory . FromAsync < WebResponse > ( request . BeginGetResponse , request . EndGetResponse , null ) ;
275
- ThreadPool . RegisterWaitForSingleObject ( ( getResponse as IAsyncResult ) . AsyncWaitHandle , ThreadTimeoutCallback , request , timeout , true ) ;
276
- yield return getResponse ;
271
+ // Get the response
272
+ var getResponse = Task . Factory . FromAsync < WebResponse > ( request . BeginGetResponse , request . EndGetResponse , null ) ;
273
+ // ThreadPool.RegisterWaitForSingleObject((getResponse as IAsyncResult).AsyncWaitHandle, ThreadTimeoutCallback, request, timeout, true);
274
+ yield return getResponse ;
277
275
278
- // Get the response stream
279
- using ( var response = ( HttpWebResponse ) getResponse . Result )
280
- using ( var responseStream = response . GetResponseStream ( ) )
281
- {
282
- // Copy all data from the response stream
283
- var output = new MemoryStream ( ) ;
284
- var buffer = new byte [ BUFFER_SIZE ] ;
285
- while ( responseStream != null )
276
+ // Get the response stream
277
+ using ( var response = ( HttpWebResponse ) getResponse . Result )
278
+ using ( var responseStream = response . GetResponseStream ( ) )
286
279
{
287
- var read = Task < int > . Factory . FromAsync ( responseStream . BeginRead , responseStream . EndRead , buffer , 0 , BUFFER_SIZE , null ) ;
288
- yield return read ;
289
- if ( read . Result == 0 ) break ;
290
- output . Write ( buffer , 0 , read . Result ) ;
291
- }
280
+ // Copy all data from the response stream
281
+ var output = new MemoryStream ( ) ;
282
+ var buffer = new byte [ BUFFER_SIZE ] ;
283
+ while ( responseStream != null )
284
+ {
285
+ var read = Task < int > . Factory . FromAsync ( responseStream . BeginRead , responseStream . EndRead , buffer , 0 , BUFFER_SIZE , null ) ;
286
+ yield return read ;
287
+ if ( read . Result == 0 ) break ;
288
+ output . Write ( buffer , 0 , read . Result ) ;
289
+ }
292
290
293
- // Decode the data and store the result
294
- var result = Encoding . UTF8 . GetString ( output . ToArray ( ) ) ;
295
- var cs = new ConnectionStatus ( result ) { Request = data , RequestUrl = request . RequestUri . ToString ( ) , RequestMethod = request . Method } ;
296
- tcs . TrySetResult ( cs ) ;
291
+ // Decode the data and store the result
292
+ var result = Encoding . UTF8 . GetString ( output . ToArray ( ) ) ;
293
+ var cs = new ConnectionStatus ( result ) { Request = data , RequestUrl = request . RequestUri . ToString ( ) , RequestMethod = request . Method } ;
294
+ tcs . TrySetResult ( cs ) ;
295
+ tracer . SetResult ( cs ) ;
296
+ _ConnectionSettings . ConnectionStatusHandler ( cs ) ;
297
+ }
298
+ yield break ;
297
299
}
298
- yield break ;
299
300
300
301
}
301
302
0 commit comments