API を呼び出して、それ自体を更新する必要があるデータを取得するバックグラウンド タスクを持つ Win RT アプリがあります。ただし、問題が発生しました。API を呼び出す要求は、バックグラウンド タスクの外で実行すると完全に機能します。バックグラウンド タスク内では失敗し、問題を指摘するのに役立つ可能性のある例外も非表示になります。
この問題をデバッガーで追跡して問題点を追跡し、実行が GetAsync で停止することを確認しました。(私が渡している URL は有効であり、URL は 1 秒以内に応答します)
var client = new HttpClient("http://www.some-base-url.com/");
try
{
response = await client.GetAsync("valid-url");
// Never gets here
Debug.WriteLine("Done!");
}
catch (Exception exception)
{
// No exception is thrown, never gets here
Debug.WriteLine("Das Exception! " + exception);
}
私が読んだすべてのドキュメントには、バックグラウンド タスクが必要なだけのネットワーク トラフィックを持つことが許可されていると書かれています (もちろん調整されています)。したがって、なぜこれが失敗するのか、または問題を診断する他の方法を知っているのかわかりません。私は何が欠けていますか?
更新/回答
スティーブンのおかげで、彼は問題への道を示しました。定義された答えがそこにあることを確認するために、修正前後のバックグラウンド タスクを次に示します。
前
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
Update();
deferral.Complete();
}
public async void Update()
{
...
}
後
public async void Run(IBackgroundTaskInstance taskInstance) // added 'async'
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
await Update(); // added 'await'
deferral.Complete();
}
public async Task Update() // 'void' changed to 'Task'
{
...
}