Я зіткнувся з цікавою поведінкою під час дослідження IAsyncEnumerable у проекті веб-API ASP.NET. Розглянемо наступні зразки коду:
// Code Sample 1
[HttpGet]
public async IAsyncEnumerable<int> GetAsync()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(1000);
yield return i;
}
}
// Code Sample 2
[HttpGet]
public async IAsyncEnumerable<string> GetAsync()
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(1000);
yield return i.ToString();
}
}
Зразок 1 (масив int) повертається {}
як результат JSON.
Зразок 2 повертає очікуваний результат ["0","1","2","3","4","5","6","7","8","9"]
. Однак весь масив JSON повертається відразу після 10 секунд очікування. Чи не слід його повернути, оскільки дані стають доступними, як очікувалося від інтерфейсу IAsyncEnumerable? Або існує якийсь конкретний спосіб використання цієї веб-програми?
IAsyncEnumerable<int>
IAsyncEnumerable<object>