Подтвердить что ты не робот

Метод был вызван в неожиданное время

Я пытаюсь выполнить итерацию всех файлов в каталоге с помощью 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();
}
4b9b3361

Ответ 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