HttpClient GetAsync falla en una tarea en segundo plano en Windows 8
Tengo una aplicación Win RT que tiene una tarea de fondo responsable de llamar a una API para recuperar los datos que necesita para actualizarse. Sin embargo, me he encontrado con un problema; La solicitud para llamar a la API funciona perfectamente cuando se ejecuta fuera de la tarea en segundo plano. Dentro de la tarea en segundo plano, falla y también oculta cualquier excepción que pueda ayudar a señalar el problema.
Rastreé este problema a través del depurador para rastrear el punto problemático y verifiqué que la ejecución se detiene en GetAsync. (La URL que paso es válida y la URL responde en menos de un segundo)
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);
}
Toda la documentación que he leído dice que una tarea en segundo plano puede tener tanto tráfico de red como sea necesario (acelerado, por supuesto). Por lo tanto, no entiendo por qué esto podría fallar, o no conozco ninguna otra forma de diagnosticar el problema. ¿Qué me estoy perdiendo?
ACTUALIZACIÓN / RESPUESTA
Gracias a Steven, señaló el camino hacia el problema. En el interés de asegurarse de que la respuesta definida esté disponible, aquí estaba la tarea en segundo plano antes y después de la corrección:
antes de
public void Run(IBackgroundTaskInstance taskInstance)
{
BackgroundTaskDeferral deferral = taskInstance.GetDeferral();
Update();
deferral.Complete();
}
public async void Update()
{
...
}
Después
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'
{
...
}