Я столкнулся с интересным поведением при изучении IAsyncEnumerable в проекте ASP.NET Web API. Рассмотрим следующие примеры кода:
// 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? Или есть какой-то конкретный способ использования этого веб-API?
IAsyncEnumerable<int>
на IAsyncEnumerable<object>
- это должно работать, но тогда будет задействован бокс)