Skip to content

Commit 6b97e57

Browse files
committed
begingetresponse.cs fixed
1 parent 471e104 commit 6b97e57

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

snippets/csharp/System.Net/HttpWebRequest/Abort/begingetresponse.cs

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public RequestState()
3838
class 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("\nRespCallback Exception raised!");
135143
Console.WriteLine("\nMessage:{0}", e.Message);
136144
Console.WriteLine("\nStatus:{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("\nReadCallBack Exception raised!");
185195
Console.WriteLine("\nMessage:{0}", e.Message);
186196
Console.WriteLine("\nStatus:{0}", e.Status);
197+
allDone.Set();
187198
}
188-
allDone.Set();
189199
}
190200
// </Snippet1>
191201
}

0 commit comments

Comments
 (0)