Funkcja MVC nie buforuje typów IAsyncEnumerable w przypadku korzystania z pliku System.Text.Json
W ASP.NET Core 5 mvC dodał obsługę typów formatowania IAsyncEnumerable<T> danych wyjściowych przez buforowanie sekwencji w pamięci i formatowanie buforowanej kolekcji. W ASP.NET Core 6 podczas formatowania przy użyciu klasy System.Text.JsonMVC nie buforuje IAsyncEnumerable<T> już wystąpień. Zamiast tego mvC opiera się na obsłudze dodanej System.Text.Json dla tych typów.
W większości przypadków brak buforowania nie będzie widoczny przez aplikację. Jednak niektóre scenariusze mogły przypadkowo polegać na semantyce buforowania w celu poprawnej serializacji. Na przykład zwrócenie kwerendy IAsyncEnumerable<T> opartej na platformie Entity Framework dla typu z właściwościami ładowanymi z opóźnieniem może spowodować współbieżne wykonanie zapytania, co może nie być obsługiwane przez dostawcę.
Ta zmiana nie ma wpływu na formatowanie danych wyjściowych przy użyciu formatu Newtonsoft.Json lub formatów opartych na formacie XML.
Wprowadzona wersja
ASP.NET Core 6.0
Stare zachowanie
IAsyncEnumerable<T> wystąpienia zwracane z akcji MVC jako wartości do sformatowania przy użyciu ObjectResult lub JsonResult są buforowane przed serializacji jako kolekcja synchroniczna.
Nowe zachowanie
Podczas formatowania przy użyciu klasy System.Text.JsonMVC wystąpienia nie buforują IAsyncEnumerable<T> już wystąpień.
Przyczyna wprowadzenia zmiany
System.Text.Json dodano obsługę typów przesyłania strumieniowego IAsyncEnumerable<T> . Pozwala to na mniejsze zużycie pamięci podczas serializacji.
Zalecana akcja
Jeśli aplikacja wymaga buforowania, rozważ ręczne buforowanie IAsyncEnumerable<T> obiektu:
// Before
public IActionResult Get()
{
return Ok(dbContext.Blogs);
}
// After
public async Task<IActionResult> Get()
{
return Ok(await dbContext.Blogs.ToListAsync());
}