A IAsyncEnumerable<T>
ve a döndüren NotFoundResult
ancak yine de zaman uyumsuz bir şekilde işlenen bir denetleyici eylemi için doğru imza nedir ?
Bu imzayı kullandım ve derlenmedi çünkü IAsyncEnumerable<T>
beklenmiyor:
[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);
}
}
Bu iyi derler ama imzası zaman uyumsuz değildir. Bu yüzden iş parçacığı havuzu konuları engelleyip engellemeyeceği konusunda endişeliyim:
[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
Böyle bir döngü kullanarak denedim ama açıkçası ya da derlemek olmaz:
[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
beklenebilir. Kullanın await foreach(var item from ThatMethodAsync()){...}
.
IAsyncEnumerable<MyObject>
, sonucu döndürmeniz yeterlidir, örn return objects
. Bu alışkanlık olsa akışı gRPC veya SignalR yöntemine bir HTTP eylemi dönüştürün. Ara yazılım hala verileri tüketecek ve istemciye tek bir HTTP yanıtı gönderecektir
IAsyncEnumerable
3.0'dan beri geçerlidir.
MyObject
Aynı ürünle birden fazla ürünid
mi iade ediyorsunuz ? NormaldeNotFound
, döndüren bir şey için a göndermezsinizIEnumerable
- yalnızca boş olur - veya tek öğeyi istenenid
/ ile döndürürsünüzNotFound
.