在ThreadPool.RunAsync中读取SyndicationFeed



我正在开发一个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。

在后台任务中运行异步,它已经运行在一个单独的线程中。

相关内容

  • 没有找到相关文章

最新更新