exception - Un método fue llamado en un momento inesperado
windows-8 windows-runtime (3)
Estoy intentando iterar todos los archivos en un directorio usando GetFilesAsync, pero cada vez que llamo al método GetResults, se produce una excepción que dice
System.InvalidOperationException: se llamó a un método en un momento inesperado
El código es simplemente
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
Soy nuevo en Win 8 dev, así que podría estar perdiendo algo obvio.
Editar (solucionado) Estoy ejecutando mi aplicación de consola, pero ahora que el programa ejecuta async, el files.GetResult()
los files.GetResult()
ya no existe.
static void Main(string[] args)
{
var files = GetFiles(myStorageFolder);
var results = files.GetAwaiter().GetResults();//Need to add GetAwaiter()
}
static async Task GetFiles(StorageFolder sf)
{
await sf.GetFilesAsync();
}
Si no desea usar la palabra clave async
(en mi caso, el código estaba dentro de una propiedad, por lo que async
no era una opción), puede usar un TaskAwaiter
en TaskAwaiter
lugar, encadenando estos dos métodos:
var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
Esto no lanzará una InvalidOperationException
ni causará un interbloqueo.
Tienes que esperar a que se complete el método asíncrono. Así que podrías usar el nuevo aguardar como una opción:
var files = await myStorageFolder.GetFilesAsync();
Es posible que desee consultar la documentación sobre cómo tratar con los métodos asíncronos here .
debe await
los var files = myStorageFolder.GetFilesAsync();
ya que la operación podría seguir ejecutándose cuando llegue a la siguiente instrucción var results = files.GetResults(); //throws the exception
var results = files.GetResults(); //throws the exception
var files = await myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //this will run when call above returns