我正在开发一个Windows 8 Metro RSS Feed应用程序。因此,我正在实现一个后台任务来检查是否有新的Feed可用,并通知用户如果有的话。我这样做:
public sealed class UpdateCheck : IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral backgroundTaskDeferral = taskInstance.GetDeferral();
await StartUpdateCheck();
backgroundTaskDeferral.Complete();
}
public IAsyncAction StartUpdateCheck()
{
return ThreadPool.RunAsync(async o =>
{
SyndicationClient client = new SyndicationClient();
SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));
ApplicationDataContainer applicationDataContainer = ApplicationData.Current.LocalSettings;
string lastFeedId = (string) applicationDataContainer.Values["LastFeedId"];
if (lastFeedId != feed.Items.First().Id)
{
// inform user
}
});
}
}
当我调试代码时,我想通过按F10跳过SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));
行,什么也没发生。后面的代码行不执行。因此,当我在 RetrieveFeedAsync
方法之前设置断点时,将击中断点。在这行之后,没有遇到断点。
我正在代码的另一个位置上阅读RSS-Feeds,这不是一个后台任务(而不是在ThreadPool.RunAsync
lambda表达式中),那里一切都很好,所以ThreadPool.RunAsync
方法可能会导致问题。
不需要ThreadPool。