Tôi đã gặp một hành vi thú vị khi khám phá IAsyncEnumerable trong một dự án API Web ASP.NET. Hãy xem xét các mẫu mã sau:
// 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();
}
}
Mẫu 1 (mảng int) trả về {}
dưới dạng kết quả JSON.
Mẫu 2 trả về kết quả mong đợi ["0","1","2","3","4","5","6","7","8","9"]
. Tuy nhiên, toàn bộ mảng JSON được trả về cùng một lúc sau 10 giây chờ đợi. Không nên trả lại khi dữ liệu có sẵn như mong đợi từ giao diện IAsyncEnumerable? Hoặc có bất kỳ cách cụ thể mà api web này nên được tiêu thụ?
IAsyncEnumerable<int>
thành IAsyncEnumerable<object>
- nó sẽ hoạt động nhưng sau đó có một quyền anh liên quan)