Estoy intentando cargar y leer un archivo de configuración en el inicio de la aplicación, y el 90% de las veces, el await GetFileAsync("filename.xml");
nunca regresa, por lo tanto, colgando la aplicación .Llamada a la espera GetFileAsync() nunca regresa y la aplicación se bloquea en la aplicación WinRT
Alrededor de una cuarta parte de las veces, si paso por el código, realmente regresará y leerá el archivo.
Aquí es una versión muy simplificada del código:
App.xaml.cs:
protected override void OnLaunched(LaunchActivatedEventArgs args)
{
FileLoader.Load().Wait();
// File-load dependent stuff
}
FileLoader.cs:
public async static Task Load()
{
StorageFolder folder = ApplicationData.Current.LocalFolder;
StorageFile file;
bool fileExists = true;
try
{
// The following line (often) never returns
file = await folder.GetFileAsync("filename.xml");
{
catch
{
fileExists = false;
}
// Do stuff with loaded file
}
Si miro la ventana Resultados de Visual Studio , después de un rato de esperar obtengo "The thread '<No Name>' (0x30c) has exited with code 0 (0x0)."
¿Alguien tiene alguna idea de ¿que esta pasando aqui?
Está bloqueando el subproceso de interfaz de usuario por lo que puedo ver al llamar 'Espera'. Esa es una muy mala idea. Diablos, eso podría ser incluso lo que está causando el problema. –
Creo que Jon tiene razón: ¿hay alguna posibilidad de que marques OnLaunched como asincrónico y esperes la llamada Load()? Si no puede, entonces otro enfoque podría ser que Load ejecute una acción después de que la carga haya terminado y luego ejecute la acción al final (o, por supuesto, puede usar ContinueWith en la tarea que Load() devuelve al igual que antes asincrónica/espera :) –
Ambos tenían razón, Jon y James. ¡Muchas gracias por la entrada! Originalmente estaba usando 'Wait' porque no me di cuenta de que podías agregar' async' a un método reemplazado, y no sabía que 'OnLaunched' se estaba ejecutando en el hilo de UI. Quitar 'Wait' y agregar' async' a 'OnLaunched' lo solucionó. Me gustaría poder marcar sus comentarios como la respuesta. – jokeefe