0

Windows 8MetroRSSフィードアプリを開発しています。したがって、新しいフィードが利用可能かどうかを確認し、利用できる場合はユーザーに通知するためのバックグラウンドタスクを実装しています。私はこれを次のように行います:

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
        }
      });
  }
}

SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri("http://.../feed.xml"));コードをデバッグしていて、 F10キーを押して行をステップオーバーしたい場合、何も起こりません。それ以降のコード行は実行されません。したがって、メソッドの前にブレークポイントを設定するとRetrieveFeedAsyncブレークポイントがヒットします。この行の後、ブレークポイントはヒットしません。

コード内の別の位置でRSSフィードを読んでいます。これはBackgroundTaskではなく(ThreadPool.RunAsyncラムダ式ではありません)、すべてが正常に機能するため、ThreadPool.RunAsyncメソッドが問題を引き起こす可能性があります。

4

1 に答える 1

1

バックグラウンドタスクでThreadPool.RunAsyncは必要ありません。すでに、別のスレッドで実行されています。

于 2012-12-29T10:42:42.537 に答える