HttpClient GetAsync schlägt in der Hintergrundaufgabe unter Windows 8 fehl
Ich besitze eine Win RT-App mit einer Hintergrundaufgabe, die für den Aufruf einer API zum Abrufen von Daten verantwortlich ist, die zum Aktualisieren erforderlich sind. Ich bin jedoch auf ein Problem gestoßen; Die Anforderung zum Aufrufen der API funktioniert einwandfrei, wenn sie außerhalb der Hintergrundaufgabe ausgeführt wird. Innerhalb der Hintergrundaufgabe schlägt sie fehl und verbirgt auch alle Ausnahmen, die auf das Problem hinweisen könnten.
Ich habe dieses Problem über den Debugger verfolgt, um den Problempunkt zu verfolgen, und habe überprüft, ob die Ausführung in GetAsync gestoppt wird. (Die URL, die ich übergebe, ist gültig und die URL antwortet in weniger als einer Sekunde.)
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);
}
In der gesamten Dokumentation heißt es, dass eine Hintergrundaufgabe so viel Netzwerkverkehr haben darf, wie sie benötigt (natürlich gedrosselt). Daher verstehe ich nicht, warum dies fehlschlagen würde, oder kenne keine andere Möglichkeit, das Problem zu diagnostizieren. Was vermisse ich?
UPDATE / ANTWORT
Dank Steven wies er den Weg zum Problem. Um sicherzustellen, dass die definierte Antwort da draußen ist, war hier die Hintergrundaufgabe vor und nach dem Fix:
Vor
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
Update();
deferral.Complete();
}
public async void Update()
{
...
}
Nach dem
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'
{
...
}