У меня есть следующий метод, который возвращает IAsyncEnumerable<T>
:
async IAsyncEnumerable<T> RunReport()
{
var handler = new HttpClientHandler();
var client = new HttpClient(handler);
client.BaseAddress = new Uri("");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var settings = new JsonSerializerSettings();
var jsonFormatter = new JsonMediaTypeFormatter() { SerializerSettings = settings };
var requestMessage = new HttpRequestMessage(HttpMethod.Get, "api/controler");
var response = await client.SendAsync(requestMessage);
response.EnsureSuccessStatusCode();
using (var stream = await response.Content.ReadAsStreamAsync())
{
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
var linesJson = await reader.ReadLineAsync();
var line = JsonConvert.DeserializeObject<List<T>>(linesJson, jsonFormatter.SerializerSettings);
foreach (var line in lines)
yield return line;
}
}
}
}
Я хотел бы передать этот поток результатов в базу данных, используя метод SqlBulkCopy
WriteToServerAsync
, но не могу выясните, как превратить его в IDataReader
или любой другой тип в списке перегрузки WriteToServerAsync
.
Я открыт для использования чего-то другого, кроме массового копирования, при условии, что оно достаточно эффективно.