我试图使用迭代中GetFilesAsync一个目录下的所有文件,但我每次调用GetResults方法时,它抛出,说一个异常
System.InvalidOperationException:一种方法被称为在意想不到的时间
该代码是简单
var files = myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //throws the exception
我是新来赢得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();
}
您需要等待异步方法来完成。 所以,你可以使用新的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 results = files.GetResults(); //throws the exception
var files = await myStorageFolder.GetFilesAsync(); //runs fine
var results = files.GetResults(); //this will run when call above returns