概述
我们正在将数据库访问转移到 API 调用,并且我需要从数据库返回使用该 API 找到的搜索结果。计划是使用 IAsyncEnumerable,但我在处理 HttpClient 缓冲区时遇到了麻烦(至少我认为)。该调用由 WPF 客户端上的按钮单击触发,该按钮将搜索词发送到客户端 API 服务。该服务发出 API 请求,然后使用存储库来完成工作。我使用的是最小的 API,客户端和 API 都使用 .Net 6。
问题
我遇到的问题是,虽然 IAsyncEnumerable 部分在 API 端工作,每次返回一个条目,但整个结果仍然作为单个响应传回,而不是一次返回一个响应。
信息与问题
此时,我已经将其简化,只是为了尝试让这个概念发挥作用。当不使用 HttpClient 时,IAsyncEnumerable 部分在客户端 ApiService 本身内工作得很好,但一旦引入它,我就开始遇到问题。您可以在 GetTestStreamAsync 方法的区域中看到我尝试过的各种解决方案。
所以我想主要问题之一是,IAsyncEnumerable 是否可以做到这一点?如果没有,解决方案是什么?
客户端代码
MainWindow.xaml.cs
private async void btnSearch_Click(object sender, RoutedEventArgs e)
{
// This works
//var result = apiService.GetTestAsync();
// This doesn't
var result = apiService.GetTestStreamAsync(txtSearchTerms.Text);
await foreach(var item in result!)
{
lstResults.Items.Add(item);
}
}
Run Code Online (Sandbox Code Playgroud)
主窗口.xaml
<Grid>
<TextBox x:Name="txtSearchTerms"
HorizontalAlignment="Left"
Margin="86,92,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="340"
TabIndex="1" …Run Code Online (Sandbox Code Playgroud)