加载SyndicationFeed和async/await

4

我们能通过async/await方式读取RSS吗?

XmlReader reader = XmlReader.Create("http://localhost/feeds/serializedFeed.xml");
SyndicationFeed feed = SyndicationFeed.Load(reader);

有什么线索吗?


1
你的意思是类似于这个吗:这里? - diiN__________
@diiN_ 你能提供一个答案吗?问题是SyndicationClient仅适用于最低支持客户端Windows 8 [Windows Store应用程序,桌面应用程序] https://msdn.microsoft.com/en-us/library/windows/apps/windows.web.syndication.syndicationclient.aspx - NoWar
2个回答

3

您的解决方案没有使用async/await,代码过于冗长,我怀疑您的方法在某些情况下容易发生死锁。

只需这样做:

var reader = XmlReader.Create("http://localhost/feeds/serializedFeed.xml");
var feed = await Task.Run(() => SyndicationFeed.Load(reader));

我注意到XmlReader有一个异步选项:XmlReader reader = XmlReader.Create(feedUrl, settings: new XmlReaderSettings { Async = true }); 这会对程序有帮助还是有害? - MikeT

0

好的,伙计们,这里是可行的解决方案

private  void   GetRSS(string rssUrl)
        {
            Task.Factory.StartNew(() => {
                using (XmlReader r = XmlReader.Create(rssUrl))
                {
                    SyndicationFeed feed = SyndicationFeed.Load(r);
                    Action bindData = () => {
                        lstFeedItems.ItemsSource = feed.Items;
                    };
                    this.Dispatcher.InvokeAsync(bindData);
                }
            });
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接