Encontrei um comportamento interessante ao explorar IAsyncEnumerable em um projeto de API da Web do ASP.NET. Considere os seguintes exemplos de código:
// 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();
}
}
A amostra 1 (matriz int) retorna {}
como resultado JSON.
A amostra 2 retorna o resultado esperado ["0","1","2","3","4","5","6","7","8","9"]
. No entanto, toda a matriz JSON é retornada ao mesmo tempo após 10 segundos de espera. Ele não deve ser retornado quando os dados estiverem disponíveis conforme o esperado da interface IAsyncEnumerable? Ou existe alguma maneira específica de que essa API da Web deva ser consumida?
IAsyncEnumerable<int>
para IAsyncEnumerable<object>
- ele deve funcionar, mas depois há um boxe envolvidos)