@@ -15,7 +15,7 @@ public class Connection : IConnection
1515 {
1616 const int BUFFER_SIZE = 1024 ;
1717
18- private IConnectionSettings _ConnectionSettings { get ; set ; }
18+ protected IConnectionSettings _ConnectionSettings { get ; set ; }
1919 private Semaphore _ResourceLock ;
2020 private readonly bool _enableTrace ;
2121
@@ -227,17 +227,13 @@ protected virtual Task<ConnectionStatus> DoAsyncRequest(HttpWebRequest request,
227227 }
228228 try
229229 {
230- return Task . Factory . StartNew ( ( ) =>
231- {
232- using ( var tracer = new ConnectionStatusTracer ( this . _ConnectionSettings . TraceEnabled ) )
233- {
230+ //return Task.Factory.StartNew(() =>
231+ //{
232+
234233 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);
241237 }
242238 finally
243239 {
@@ -247,55 +243,60 @@ protected virtual Task<ConnectionStatus> DoAsyncRequest(HttpWebRequest request,
247243
248244 private IEnumerable < Task > _AsyncSteps ( HttpWebRequest request , TaskCompletionSource < ConnectionStatus > tcs , string data = null )
249245 {
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 ) )
255247 {
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 ;
259249
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 )
268253 {
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+ }
270269 }
271- }
272270
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 ;
277275
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 ( ) )
286279 {
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+ }
292290
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 ;
297299 }
298- yield break ;
299300
300301 }
301302
0 commit comments