gpt4 book ai didi

c# - 如何在 C# 中创建一个将生成 HTTP 响应主体行的迭代器?

转载 作者:可可西里 更新时间:2023-11-01 16:42:51 25 4
gpt4 key购买 nike

我得到的最接近的是

public async Task<IEnumerable<dynamic>> GetResults(string id, int n) {
var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Token " + token);
Stream results = await client.GetStreamAsync(baseurl + id + "/results");

StreamReader sr = new StreamReader(results);
while(!sr.EndOfStream) {
string line = await sr.ReadLineAsync();
yield return Json.Decode(line);
}
}

但它说它不能是迭代器 block ,因为 System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<dynamic>>不是迭代器接口(interface)类型。

但是,我找不到没有异步方法的方法来获取流(我只能找到 GetStreamAsync,没有 GetStream 的定义),这迫使我有一个异步方法,这迫使我返回一个任务。

最佳答案

设法使用 WebRequest 类并按照该页面上的示例进行操作:

public IEnumerable<dynamic> GetResults(string id, int n) {

WebRequest request = WebRequest.Create(baseurl + id + "/results");
request.Headers.Add("Authorization", "Token " + token);
WebResponse response = request.GetResponse();
Stream responseStream = response.GetResponseStream();

StreamReader sr = new StreamReader(responseStream);
while(!sr.EndOfStream) {
string line = sr.ReadLine();
yield return Json.Decode(line);
}
}

WebResponse 有一个 GetResponseStream,而 HttpClient 只有一个 GetStreamAsync。这使我不必等待,也不必使用异步方法。

关于c# - 如何在 C# 中创建一个将生成 HTTP 响应主体行的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24828091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com