yield 不立即将结果返回给调用者 api - C#8,IAsyncEnumerable

问题描述 投票:0回答:0

我在 api 端点中有一个代码,它应该在收到结果后立即产生结果 -

var azResponse = await _openAIRepository.GetStreamingResponse(rawAzureOpenAIRequest.Model, optns,
                canToken);

            await foreach (var choice in azResponse.Value.GetChoicesStreaming())
            {
                await foreach (var message in choice.GetTextStreaming())
                {
                    yield return message;
                    await Task.Delay(10000);
                }
            }

我的消费 api 如下, 它没有在每次收益返回后在消费 api 中遇到断点,这是我的问题,即控制在每次收益返回后都不会返回到消费 api。我希望一旦从上面的第一个 api 返回一条消息,消费 api 就应该收到它。

            using HttpResponseMessage response = await Client.GetAsync(
                "http://localhost...",
                HttpCompletionOption.ResponseHeadersRead
            ).ConfigureAwait(false);

            response.EnsureSuccessStatusCode();

           Stream responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

            IAsyncEnumerable<object> messages = JsonSerializer.DeserializeAsyncEnumerable<object>(responseStream,
            new JsonSerializerOptions
            {
                PropertyNameCaseInsensitive = true,
                DefaultBufferSize = 10
            });

            Response.Headers.Add("Content-Type", "text/event-stream");

            await foreach (var message in messages)
            {
                debugger;
                byte[] messageBytes = ASCIIEncoding.ASCII.GetBytes("data:" + message + "\n\n");
                await Response.Body.WriteAsync(messageBytes, 0, messageBytes.Length);
                await Response.Body.FlushAsync();
            }

有人可以解释为什么会这样吗。

我曾尝试添加延迟以检查控制是否在产生回报后返回使用 api,但事实并非如此。

c# api yield c#-8.0 iasyncenumerable
© www.soinside.com 2019 - 2024. All rights reserved.