J'ai rencontré un comportement intéressant lors de l'exploration d'IAsyncEnumerable dans un projet d'API Web ASP.NET. Considérez les exemples de code suivants:
// 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();
}
}
L'échantillon 1 (tableau int) renvoie en {}
tant que résultat JSON.
L'échantillon 2 renvoie le résultat attendu ["0","1","2","3","4","5","6","7","8","9"]
. Cependant, l'intégralité du tableau JSON est retourné en une seule fois après 10 secondes d'attente. Ne doit-il pas être renvoyé lorsque les données deviennent disponibles comme prévu à partir de l'interface IAsyncEnumerable? Ou existe-t-il un moyen spécifique de consommer cette API Web?
IAsyncEnumerable<int>
à IAsyncEnumerable<object>
- cela devrait fonctionner mais il y a une boxe impliquée)