Saya menemukan perilaku yang menarik saat menjelajahi IAsyncEnumerable dalam proyek ASP.NET Web API. Pertimbangkan contoh kode berikut:
// 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();
}
}
Sampel 1 (array int) kembali {}
sebagai hasil JSON.
Sampel 2 mengembalikan hasil yang diharapkan ["0","1","2","3","4","5","6","7","8","9"]
. Namun, seluruh array JSON dikembalikan sekaligus setelah 10 detik menunggu. Tidakkah seharusnya dikembalikan saat data tersedia seperti yang diharapkan dari antarmuka IAsyncEnumerable? Atau adakah cara khusus api web ini harus dikonsumsi?
c#
asp.net-core
asp.net-core-webapi
iasyncenumerable
Ravi M Patel
sumber
sumber
IAsyncEnumerable<int>
keIAsyncEnumerable<object>
- harus bekerja tapi kemudian ada tinju yang terlibat)Jawaban:
Panggilan api web tidak akan mengembalikan sebagian json setiap detik. Ini adalah serialiser json yang harus menunggu 10x1second (atau kode yang memanggil serialiser json, yang merupakan bagian dari ASP .NET). Setelah kode kerangka kerja dan serialiser mendapatkan semua data, itu akan disajikan secara serial - sebagai satu tanggapan - kepada klien.
Dalam jenis tindakan pengembalian Controller di API web ASP.NET Core kita dapat membaca:
sumber