Spotkałem interesujące zachowanie podczas eksploracji IAsyncEnumerable w projekcie ASP.NET Web API. Rozważ następujące przykłady kodu:
// 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();
}
}
Próbka 1 (tablica int) zwraca {}
jako wynik JSON.
Próbka 2 zwraca oczekiwany wynik ["0","1","2","3","4","5","6","7","8","9"]
. Jednak cała tablica JSON jest zwracana jednocześnie po 10 sekundach oczekiwania. Czy nie należy zwrócić, ponieważ dane stają się dostępne zgodnie z oczekiwaniami z interfejsu IAsyncEnumerable? Czy jest jakiś konkretny sposób, w jaki należy korzystać z tego interfejsu API?
IAsyncEnumerable<int>
na IAsyncEnumerable<object>
- powinno działać, ale wtedy występuje boks)