@@ -38,7 +38,7 @@ public RequestState()
3838class HttpWebRequest_BeginGetResponse
3939{
4040 public static ManualResetEvent allDone = new ManualResetEvent ( false ) ;
41- const int BUFFER_SIZE = 1 ;
41+ const int BUFFER_SIZE = 1024 ;
4242 const int DefaultTimeout = 2 * 60 * 1000 ; // 2 minutes timeout
4343
4444 // Abort the request if the timer fires.
@@ -97,6 +97,29 @@ static void Main()
9797 Console . Read ( ) ;
9898 }
9999 }
100+
101+ private static void HandleSyncResponseReadCompletion ( IAsyncResult asynchronousReadResult )
102+ {
103+ RequestState requestState = ( RequestState ) asynchronousReadResult . AsyncState ;
104+ Stream responseStream = requestState . ResponseStream ;
105+
106+ bool readComplete = false ;
107+ while ( asynchronousReadResult . CompletedSynchronously && ! readComplete )
108+ {
109+ int read = responseStream . EndRead ( asynchronousReadResult ) ;
110+ if ( read > 0 )
111+ {
112+ requestState . OnResponseBytesRead ( read ) ;
113+ asynchronousReadResult = responseStream . BeginRead ( requestState . ReadBuffer , 0 , BUFFER_SIZE , new AsyncCallback ( ReadCallBack ) , requestState ) ;
114+ }
115+ else
116+ {
117+ readComplete = true ;
118+ OnReadComplete ( requestState ) ;
119+ }
120+ }
121+ }
122+
100123 private static void RespCallback ( IAsyncResult asynchronousResult )
101124 {
102125 try
@@ -112,30 +135,16 @@ private static void RespCallback(IAsyncResult asynchronousResult)
112135
113136 // Begin the Reading of the contents of the HTML page and print it to the console.
114137 IAsyncResult asynchronousReadResult = responseStream . BeginRead ( requestState . ReadBuffer , 0 , BUFFER_SIZE , new AsyncCallback ( ReadCallBack ) , requestState ) ;
115- while ( asynchronousReadResult . CompletedSynchronously )
116- {
117- int read = responseStream . EndRead ( asynchronousReadResult ) ;
118- // Read the HTML page and then print it to the console.
119- if ( read > 0 )
120- {
121- requestState . OnResponseBytesRead ( read ) ;
122- asynchronousReadResult = responseStream . BeginRead ( requestState . ReadBuffer , 0 , BUFFER_SIZE , new AsyncCallback ( ReadCallBack ) , requestState ) ;
123- }
124- else
125- {
126- OnReadComplete ( requestState ) ;
127- }
128- }
129-
130- return ;
138+ HandleSyncResponseReadCompletion ( asynchronousReadResult ) ;
131139 }
132140 catch ( WebException e )
133141 {
134142 Console . WriteLine ( "\n RespCallback Exception raised!" ) ;
135143 Console . WriteLine ( "\n Message:{0}" , e . Message ) ;
136144 Console . WriteLine ( "\n Status:{0}" , e . Status ) ;
145+ allDone . Set ( ) ;
137146 }
138- allDone . Set ( ) ;
147+
139148 }
140149
141150 private static void OnReadComplete ( RequestState requestState )
@@ -151,6 +160,7 @@ private static void OnReadComplete(RequestState requestState)
151160 Console . ReadLine ( ) ;
152161
153162 requestState . ResponseStream . Close ( ) ;
163+ allDone . Set ( ) ;
154164 }
155165
156166 private static void ReadCallBack ( IAsyncResult asyncResult )
@@ -172,7 +182,7 @@ private static void ReadCallBack(IAsyncResult asyncResult)
172182 {
173183 requestState . OnResponseBytesRead ( read ) ;
174184 IAsyncResult asynchronousResult = responseStream . BeginRead ( requestState . ReadBuffer , 0 , BUFFER_SIZE , new AsyncCallback ( ReadCallBack ) , requestState ) ;
175- return ;
185+ HandleSyncResponseReadCompletion ( asynchronousResult ) ;
176186 }
177187 else
178188 {
@@ -184,8 +194,8 @@ private static void ReadCallBack(IAsyncResult asyncResult)
184194 Console . WriteLine ( "\n ReadCallBack Exception raised!" ) ;
185195 Console . WriteLine ( "\n Message:{0}" , e . Message ) ;
186196 Console . WriteLine ( "\n Status:{0}" , e . Status ) ;
197+ allDone . Set ( ) ;
187198 }
188- allDone . Set ( ) ;
189199 }
190200 // </Snippet1>
191201}
0 commit comments