A IAsyncEnumerable<T>ve a döndüren NotFoundResultancak 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 foreachBö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;
}
}
IAsyncEnumerablebeklenebilir. 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
IAsyncEnumerable3.0'dan beri geçerlidir.
MyObjectAynı ürünle birden fazla ürünidmi 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.