@@ -38,7 +38,7 @@ public RequestState()
38
38
class HttpWebRequest_BeginGetResponse
39
39
{
40
40
public static ManualResetEvent allDone = new ManualResetEvent ( false ) ;
41
- const int BUFFER_SIZE = 1 ;
41
+ const int BUFFER_SIZE = 1024 ;
42
42
const int DefaultTimeout = 2 * 60 * 1000 ; // 2 minutes timeout
43
43
44
44
// Abort the request if the timer fires.
@@ -97,6 +97,29 @@ static void Main()
97
97
Console . Read ( ) ;
98
98
}
99
99
}
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
+
100
123
private static void RespCallback ( IAsyncResult asynchronousResult )
101
124
{
102
125
try
@@ -112,30 +135,16 @@ private static void RespCallback(IAsyncResult asynchronousResult)
112
135
113
136
// Begin the Reading of the contents of the HTML page and print it to the console.
114
137
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 ) ;
131
139
}
132
140
catch ( WebException e )
133
141
{
134
142
Console . WriteLine ( "\n RespCallback Exception raised!" ) ;
135
143
Console . WriteLine ( "\n Message:{0}" , e . Message ) ;
136
144
Console . WriteLine ( "\n Status:{0}" , e . Status ) ;
145
+ allDone . Set ( ) ;
137
146
}
138
- allDone . Set ( ) ;
147
+
139
148
}
140
149
141
150
private static void OnReadComplete ( RequestState requestState )
@@ -151,6 +160,7 @@ private static void OnReadComplete(RequestState requestState)
151
160
Console . ReadLine ( ) ;
152
161
153
162
requestState . ResponseStream . Close ( ) ;
163
+ allDone . Set ( ) ;
154
164
}
155
165
156
166
private static void ReadCallBack ( IAsyncResult asyncResult )
@@ -172,7 +182,7 @@ private static void ReadCallBack(IAsyncResult asyncResult)
172
182
{
173
183
requestState . OnResponseBytesRead ( read ) ;
174
184
IAsyncResult asynchronousResult = responseStream . BeginRead ( requestState . ReadBuffer , 0 , BUFFER_SIZE , new AsyncCallback ( ReadCallBack ) , requestState ) ;
175
- return ;
185
+ HandleSyncResponseReadCompletion ( asynchronousResult ) ;
176
186
}
177
187
else
178
188
{
@@ -184,8 +194,8 @@ private static void ReadCallBack(IAsyncResult asyncResult)
184
194
Console . WriteLine ( "\n ReadCallBack Exception raised!" ) ;
185
195
Console . WriteLine ( "\n Message:{0}" , e . Message ) ;
186
196
Console . WriteLine ( "\n Status:{0}" , e . Status ) ;
197
+ allDone . Set ( ) ;
187
198
}
188
- allDone . Set ( ) ;
189
199
}
190
200
// </Snippet1>
191
201
}
0 commit comments