private async Task WriteStreamFeed(StreamDataFeed feed, TdsParserStateObject stateObj, int len)
{
TdsOutputStream output = new TdsOutputStream(this, stateObj, null);
byte[] buff = new byte[constBinBufferSize];
int nWritten = 0;
do
{
int nRead = 0;
int readSize = constBinBufferSize;
if (len > 0 && nWritten + readSize > len)
{
readSize = len - nWritten;
}
Debug.Assert(readSize >= 0);
if (_asyncWrite)
{
nRead = await feed._source.ReadAsync(buff, 0, readSize).ConfigureAwait(false);
}
else
{
nRead = feed._source.Read(buff, 0, readSize);
}
if (nRead == 0)
{
return;
}
if (_asyncWrite)
{
await output.WriteAsync(buff, 0, nRead).ConfigureAwait(false);
}
else
{
output.Write(buff, 0, nRead);
}
nWritten += nRead;
} while (len <= 0 || nWritten < len);
}