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