空调安装工做网站,校园文化设计公司 案例,网站建设技术课程设计报告,女孩子做运营是不是压力很大前言IAsyncEnumerableT支持返回异步迭代的枚举器#xff0c;但在.NET 6之前#xff0c;即使在API中使用了IAsyncEnumerableT#xff0c;它还是使用同步方式输出#xff0c;首先将结果缓冲到内存中#xff0c;然后再写入响应中#xff1a;[HttpGet]
publi… 前言IAsyncEnumerableT支持返回异步迭代的枚举器但在.NET 6之前即使在API中使用了IAsyncEnumerableT它还是使用同步方式输出首先将结果缓冲到内存中然后再写入响应中[HttpGet]
public IAsyncEnumerableWeatherForecast Get()
{var rng new Random();async IAsyncEnumerableWeatherForecast streamWeatherForecastsAsync(){for (int index 1; index 5; index){WeatherForecast weatherForecast new WeatherForecast{Date ${DateTime.Now:ss.fff},TemperatureC rng.Next(-20, 55),Summary Summaries[rng.Next(Summaries.Length)]};await Task.Delay(1000);yield return weatherForecast;};};return streamWeatherForecastsAsync();
}现在在.NET 6中我们可以使用异步流。Demo1.服务端采用上面相同的代码可以看到不同的返回效果IAsyncEnumerable实例采用异步方式迭代写入响应中不再阻塞请求调用。需要注意的是只有使用System.Text.Json进行序列化时此功能才会起作用。2.客户端同样我们可以在客户端异步接收响应示例代码如下HttpClient httpClient new();var response await httpClient.GetAsync(https://localhost:7211/WeatherForecast,HttpCompletionOption.ResponseHeadersRead
);var weatherForecasts await response.Content.ReadFromJsonAsyncIAsyncEnumerableWeatherForecast();await foreach (var weatherForecast in weatherForecasts)
{Console.WriteLine($[{DateTime.Now:ss.fff}] {weatherForecast.Date});
}但是实际运行效果却是按照同步方式执行的这是因为我们必须使用System.Text.Json提供的专门方法处理异步流反序列化var responseStream await response.Content.ReadAsStreamAsync();
var weatherForecasts JsonSerializer.DeserializeAsyncEnumerableWeatherForecast(responseStream,new JsonSerializerOptions{PropertyNameCaseInsensitive true,DefaultBufferSize 50});需要将DefaultBufferSize设置较小的值保证异步迭代及时返回。结论EF Core支持IAsyncEnumerable查询数据可以将EF Core从数据库中获取的数据直接使用异步流的方式传输到响应无需大量内存缓冲数据提高程序性能。如果你觉得这篇文章对你有所启发请关注我的个人公众号”My IO“