在ThreadPool.RunAsync中读取SyndicationFeed

时间:2012-12-28 16:33:55

标签: c# microsoft-metro threadpool

我正在开发一个Windows 8 Metro RSS 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,它不是BackgroundTask(而不是ThreadPool.RunAsync lambda表达式)并且一切正常,所以ThreadPool.RunAsync方法可能会导致问题。

1 个答案:

答案 0 :(得分:1)

后台任务中不需要ThreadPool.RunAsync,它已经在一个单独的线程中运行。