IAsyncEnumerable<T>and を返すが、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。