Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.Json, MVC nie buforuje już elementów IAsyncEnumerable<T>. Zamiast tego MVC opiera się na obsłudze, którą System.Text.Json dodało 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.
Wersja wprowadzona
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 System.Text.Json, MVC nie buforuje już wystąpień IAsyncEnumerable<T>.
Przyczyna 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());
}