ฉันพบพฤติกรรมที่น่าสนใจขณะสำรวจ IAsyncEnumerable ในโครงการ ASP.NET Web API พิจารณาตัวอย่างรหัสต่อไปนี้:
// 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();
}
}
ตัวอย่างที่ 1 (int array) จะคืนค่า{}
เป็นผลลัพธ์ของ JSON
["0","1","2","3","4","5","6","7","8","9"]
ผลตัวอย่าง 2 ผลตอบแทนที่คาดว่า อย่างไรก็ตามอาร์เรย์ JSON ทั้งหมดจะถูกส่งคืนพร้อมกันหลังจากรอ 10 วินาที ไม่ควรส่งคืนเนื่องจากข้อมูลพร้อมใช้งานตามที่คาดไว้จากอินเทอร์เฟซ IAsyncEnumerable หรือมีวิธีใดที่ควรใช้ API ของเว็บนี้
IAsyncEnumerable<int>
ไปIAsyncEnumerable<object>
- มันควรจะทำงาน แต่แล้วก็มีความเป็นมวยที่เกี่ยวข้อง)