ASP.NET 웹 API 프로젝트에서 IAsyncEnumerable을 탐색하는 동안 흥미로운 동작이 발생했습니다. 다음 코드 샘플을 고려하십시오.
// 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 배열)은 {}
JSON 결과로 반환 됩니다.
샘플 2는 예상 결과를 반환합니다 ["0","1","2","3","4","5","6","7","8","9"]
. 그러나 10 초 동안 기다린 후 전체 JSON 배열이 한 번에 반환됩니다. IAsyncEnumerable 인터페이스에서 예상대로 데이터를 사용할 수있게되면 반환되지 않아야합니까? 아니면이 웹 API를 사용해야하는 특정 방법이 있습니까?
4
IAsyncEnumerable 인터페이스에서 예상대로 데이터를 사용할 수있게되면 반환되지 않아야합니까? ... 그리고 그것은 ...하지만 json serializer를
—
Selvin
그리고 샘플 1 .... 비 참조 유형에 대한 버그 인 것 같습니다 (변경
—
Selvin
IAsyncEnumerable<int>
하면 IAsyncEnumerable<object>
작동하지만 권투가 관련됩니다)
@Selvin, 좀 더 자세히 설명해 주시겠습니까? 아니면 코드 샘플을 가리 킵니까? 나는 C #을 클라이언트이 API를 소비했는데, 결과는 동일, 10 초 동안 기다릴 필요가 ...
—
라비 M 파텔
10 초 동안 기다려야합니다 ... 직렬화는 서버 측에 있으며 비동기 적이 지 않습니다 ... 무엇에 대해 자세히 설명합니까?
—
Selvin
버그는 여기에 있습니다 ... 분명히 그 이유입니다
—
Selvin