a IAsyncEnumerable<T>
와 a 를 반환 NotFoundResult
하지만 여전히 비동기 방식으로 처리 되는 컨트롤러 작업에 대한 올바른 서명은 무엇입니까 ?
이 서명을 사용 IAsyncEnumerable<T>
했으며 기다릴 수 없기 때문에 컴파일되지 않습니다 .
[HttpGet]
public async Task<IActionResult> GetAll(Guid id)
{
try
{
return Ok(await repository.GetAll(id)); // GetAll() returns an IAsyncEnumerable
}
catch (NotFoundException e)
{
return NotFound(e.Message);
}
}
이것은 잘 컴파일되지만 서명은 비동기 적이 지 않습니다. 따라서 스레드 풀 스레드를 차단할지 여부가 걱정됩니다.
[HttpGet]
public IActionResult GetAll(Guid id)
{
try
{
return Ok(repository.GetAll(id)); // GetAll() returns an IAsyncEnumerable
}
catch (NotFoundException e)
{
return NotFound(e.Message);
}
}
나는 await foreach
이런 식 으로 루프를 사용하려고 시도 했지만 분명히 컴파일되지 않았습니다.
[HttpGet]
public async IAsyncEnumerable<MyObject> GetAll(Guid id)
{
IAsyncEnumerable<MyObject> objects;
try
{
objects = contentDeliveryManagementService.GetAll(id); // GetAll() returns an IAsyncEnumerable
}
catch (DeviceNotFoundException e)
{
return NotFound(e.Message);
}
await foreach (var obj in objects)
{
yield return obj;
}
}
IAsyncEnumerable
기다릴 수 있습니다. 사용하십시오 await foreach(var item from ThatMethodAsync()){...}
.
IAsyncEnumerable<MyObject>
반환하려면 결과를 반환하십시오 (예 :) return objects
. 그것은 하지 않습니다 비록 스트리밍 gRPC 또는 SignalR 방법에 HTTP 조치를 변환합니다. 미들웨어는 여전히 데이터를 소비하고 클라이언트에 하나의 HTTP 응답을 보내드립니다
IAsyncEnumerable
처리하며 3.0부터 인식됩니다.
MyObject
같은 항목 으로 여러 항목을 반품 하고id
있습니까? 일반적으로 당신은를NotFound
반환하는 무언가를 보내지 않을 것입니다IEnumerable
-그것은 비어있을 것입니다-또는 당신은id
/ 요청 된 단일 아이템을 반환 할 것NotFound
입니다.