HttpClient GetAsync kończy się niepowodzeniem w tle w systemie Windows 8
Mam aplikację Win RT, która ma zadanie w tle odpowiedzialne za wywoływanie interfejsu API w celu pobierania danych potrzebnych do aktualizacji. Mam jednak problem; żądanie wywołania interfejsu API działa doskonale, gdy jest uruchamiane poza zadaniem w tle. Wewnątrz zadania w tle kończy się niepowodzeniem, a także ukrywa wszelkie wyjątki, które mogą pomóc w wskazaniu problemu.
Śledziłem ten problem za pomocą debugera, aby śledzić punkt problemu, i sprawdziłem, czy wykonanie zatrzymuje się na GetAsync. (Adres URL, który przekazuję, jest prawidłowy, a adres URL odpowiada w mniej niż sekundę)
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);
}
Cała dokumentacja, którą przeczytałem, mówi, że zadanie w tle może mieć tyle ruchu sieciowego, ile potrzebuje (oczywiście dławione). Więc nie rozumiem, dlaczego to się nie powiedzie, lub nie wiem, w jaki sposób zdiagnozować problem. czego mi brakuje?
UPDATE / ANSWER
Dzięki Stevenowi wskazał drogę do problemu. W celu upewnienia się, że zdefiniowana odpowiedź jest tam, oto zadanie w tle przed i po poprawce:
Przed
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
Update();
deferral.Complete();
}
public async void Update()
{
...
}
Po
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'
{
...
}