private async Task WriteTextFeed(TextDataFeed feed, Encoding encoding, bool needBom, TdsParserStateObject stateObj, int size)
{
Debug.Assert(encoding == null || !needBom);
char[] inBuff = new char[constTextBufferSize];
encoding = encoding ?? new UnicodeEncoding(false, false);
ConstrainedTextWriter writer = new ConstrainedTextWriter(new StreamWriter(new TdsOutputStream(this, stateObj, null), encoding), size);
if (needBom)
{
if (_asyncWrite)
{
await writer.WriteAsync((char)TdsEnums.XMLUNICODEBOM).ConfigureAwait(false);
}
else
{
writer.Write((char)TdsEnums.XMLUNICODEBOM);
}
}
int nWritten = 0;
do
{
int nRead = 0;
if (_asyncWrite)
{
nRead = await feed._source.ReadBlockAsync(inBuff, 0, constTextBufferSize).ConfigureAwait(false);
}
else
{
nRead = feed._source.ReadBlock(inBuff, 0, constTextBufferSize);
}
if (nRead == 0)
{
break;
}
if (_asyncWrite)
{
await writer.WriteAsync(inBuff, 0, nRead).ConfigureAwait(false);
}
else
{
writer.Write(inBuff, 0, nRead);
}
nWritten += nRead;
} while (!writer.IsComplete);
if (_asyncWrite)
{
await writer.FlushAsync().ConfigureAwait(false);
}
else
{
writer.Flush();
}
}