Ho riscontrato un comportamento interessante durante l'esplorazione di IAsyncEnumerable in un progetto API Web ASP.NET. Considera i seguenti esempi di codice:
// 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();
}
}
Il campione 1 (int array) restituisce {}
come risultato JSON.
Il campione 2 restituisce il risultato atteso ["0","1","2","3","4","5","6","7","8","9"]
. Tuttavia, l'intero array JSON viene restituito immediatamente dopo 10 secondi di attesa. Non dovrebbero essere restituiti quando i dati diventano disponibili come previsto dall'interfaccia IAsyncEnumerable? O c'è un modo specifico in cui questa API web dovrebbe essere consumata?
IAsyncEnumerable<int>
in IAsyncEnumerable<object>
- dovrebbe funzionare ma poi è coinvolto un pugilato)