in aspnet/Microsoft.Samples.XMLA.HTTP/Microsoft.Samples.XMLA.HTTP.Proxy/QueryResult.cs [93:150]
static async Task WriteResultsToStream(AdomdDataReader results, Stream stream, CancellationToken cancel, Extensions.Logging.ILogger log)
{
if (results == null)
{
log.LogInformation("Null results");
return;
}
using var rdr = results;
//can't call Dispose on these without syncronous IO on the underlying connection
var tw = new StreamWriter(stream, encoding, 1024 * 4, true);
var w = new Newtonsoft.Json.JsonTextWriter(tw);
int rows = 0;
try
{
await w.WriteStartArrayAsync(cancel);
while (rdr.Read())
{
if (cancel.IsCancellationRequested)
{
throw new TaskCanceledException();
}
rows++;
await w.WriteStartObjectAsync(cancel);
for (int i = 0; i < rdr.FieldCount; i++)
{
string name = rdr.GetName(i);
object value = rdr.GetValue(i);
await w.WritePropertyNameAsync(name, cancel);
await w.WriteValueAsync(value, cancel);
}
await w.WriteEndObjectAsync(cancel);
if (rows % 50000 == 0)
{
log.LogInformation($"Wrote {rows} rows to output stream.");
}
}
log.LogInformation($"Finished Writing {rows} rows to output stream.");
await w.WriteEndArrayAsync(cancel);
await w.FlushAsync();
await tw.FlushAsync();
await stream.FlushAsync();
}
catch (TaskCanceledException ex)
{
log.LogWarning($"Writing results canceled after {rows} rows.");
}
}