gpt4 book ai didi

c# - 如何从异步 Task> 获取 List
转载 作者:太空宇宙 更新时间:2023-11-03 21:21:39 25 4
gpt4 key购买 nike

我有这段代码可以通过 HttpClient 异步获取 RSS 提要。我如何从 MVC Controller 调用它并将数据作为 List<RssFeedItem> 传递回 View ?

public class RssManager
{
public async Task<List<RssFeedItem>> GetFeedItems(string url)
{
List<RssFeedItem> result = await ReadFeed(url);
return result;
}

public async Task<List<RssFeedItem>> ReadFeed(string url)
{
List<RssFeedItem> rssFeedItems = new List<RssFeedItem>();
string result;

using (var httpClient = new HttpClient())
{
var request = new HttpRequestMessage(HttpMethod.Post, url);
var response = await httpClient.SendAsync(request);
result = response.Content.ReadAsStringAsync().Result;
}

XmlTextReader rssFeed = new XmlTextReader(result.ToString());
XmlSerializer deserializer = new XmlSerializer(typeof(List<RssFeedItem>));
rssFeedItems = (List<RssFeedItem>)deserializer.Deserialize(rssFeed);
rssFeed.Close();
rssFeed.Dispose();

return rssFeedItems;
}
}

最佳答案

How do I call this from an MVC controller and pass the data back to the view as a List<RssFeedItem>?

通常,您会在另一个 异步方法中执行此操作,并且 await结果。例如:

public async Task<ActionResult> Foo(...)
{
// ...
var list = await manager.ReadFeed(url);
// ... maybe do something with the list
return View(list);
}

一般来说,如果您不需要在同步代码和异步代码之间切换,异步会更容易处理。在这里,编译器将为您的方法的其余部分注册适当的回调,以便在 ReadFeed 返回的任务时执行。已经完成,它将创建一个 Task<ActionResult>当您提供 View 时,它本身就会完成。 ASP.NET 基础结构将处理其余部分。

关于c# - 如何从异步 Task<List<obj>> 获取 List<object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30309842/

25 4 0