提交 b24939c6 编写于 作者: G Gonzalo Paniagua Javier

Create only 1 callback instance for read/write

	Read/Write were creating one callback instance per call. Now we keep
	the same delegate around for all the calls.
上级 2b1a3ea5
......@@ -64,10 +64,12 @@ namespace System.Net
bool complete_request_written;
int read_timeout;
int write_timeout;
AsyncCallback cb_wrapper; // Calls to ReadCallbackWrapper or WriteCallbacWrapper
public WebConnectionStream (WebConnection cnc)
{
isRead = true;
cb_wrapper = new AsyncCallback (ReadCallbackWrapper);
pending = new ManualResetEvent (true);
this.request = cnc.Data.request;
read_timeout = request.ReadWriteTimeout;
......@@ -95,6 +97,7 @@ namespace System.Net
read_timeout = request.ReadWriteTimeout;
write_timeout = read_timeout;
isRead = false;
cb_wrapper = new AsyncCallback (WriteCallbackWrapper);
this.cnc = cnc;
this.request = request;
allowBuffering = request.InternalAllowBuffering;
......@@ -310,7 +313,7 @@ namespace System.Net
public override int Read (byte [] buffer, int offset, int size)
{
AsyncCallback cb = new AsyncCallback (ReadCallbackWrapper);
AsyncCallback cb = cb_wrapper;
WebAsyncResult res = (WebAsyncResult) BeginRead (buffer, offset, size, cb, null);
if (!res.IsCompleted && !res.WaitUntilComplete (ReadTimeout, false)) {
nextReadCalled = true;
......@@ -365,7 +368,7 @@ namespace System.Net
}
if (cb != null)
cb = new AsyncCallback (ReadCallbackWrapper);
cb = cb_wrapper;
if (contentLength != Int32.MaxValue && contentLength - totalRead < size)
size = contentLength - totalRead;
......@@ -509,7 +512,7 @@ namespace System.Net
AsyncCallback callback = null;
if (cb != null)
callback = new AsyncCallback (WriteCallbackWrapper);
callback = cb_wrapper;
if (sendChunked) {
WriteRequest ();
......@@ -595,7 +598,7 @@ namespace System.Net
public override void Write (byte [] buffer, int offset, int size)
{
AsyncCallback cb = new AsyncCallback (WriteCallbackWrapper);
AsyncCallback cb = cb_wrapper;
WebAsyncResult res = (WebAsyncResult) BeginWrite (buffer, offset, size, cb, null);
if (!res.IsCompleted && !res.WaitUntilComplete (WriteTimeout, false)) {
KillBuffer ();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册