void ContinueWrite()
{
do
{
lock (this.SyncRoot)
{
int count = this.bufferQueue.Count;
if (count == 0)
{
this.writing = false;
if (this.closed)
{
this.transport.SafeClose();
}
return;
}
else if (count == 1)
{
ByteBuffer buffer = this.bufferQueue.Dequeue();
this.OnBufferDequeued(buffer.Length);
this.writeAsyncEventArgs.SetBuffer(buffer);
}
else
{
var buffers = new List<ByteBuffer>(Math.Min(count, 64));
int size = 0;
for (int i = 0; i < count && size < MaxBatchSize; i++)
{
ByteBuffer buffer = this.bufferQueue.Dequeue();
buffers.Add(buffer);
size += buffer.Length;
}
this.OnBufferDequeued(size);
this.writeAsyncEventArgs.SetBuffer(buffers);
}
}
}
while (this.WriteCore());
}