Метод был вызван в неожиданное время
Я пытаюсь выполнить итерацию всех файлов в каталоге с помощью GetFilesAsync, но каждый раз, когда я вызываю метод GetResults, он генерирует исключение, в котором говорится
System.InvalidOperationException: метод был вызван при неожиданном время
Код просто
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
Я новичок в Win 8 dev, поэтому я мог бы пропустить что-то очевидное.
Изменить (разрешено)
Я запускаю консольное приложение, но теперь, когда программа работает async, метод files.GetResult()
больше не существует.
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();
}
Ответы
Ответ 1
Вам нужно дождаться завершения асинхронного метода. Таким образом, вы можете использовать новый режим ожидания как один из следующих вариантов:
var files = await myStorageFolder.GetFilesAsync();
Возможно, вы захотите проверить документацию по работе с асинхронными методами здесь.
Ответ 2
Если вы не хотите использовать ключевое слово async
(в моем случае код находился внутри свойства, поэтому async
не был вариантом), вместо этого вы можете использовать TaskAwaiter
, путем цепочки эти два метода:
var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();
Это не вызовет InvalidOperationException
и не выйдет из тупика.
Ответ 3
вы должны await
var files = myStorageFolder.GetFilesAsync();
, поскольку операция все еще может выполняться, когда вы переходите к следующей инструкции 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