一种方法被称为在意想不到的时间(A method was called at an unexpect

2019-08-02 00:40发布

我试图使用迭代中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();
}

Answer 1:

您需要等待异步方法来完成。 所以,你可以使用新的await作为一个选项:

var files = await myStorageFolder.GetFilesAsync();

你可能想检查处理异步方法的文档在这里 。



Answer 2:

如果你不希望使用async关键字(在我的情况下,代码是一个属性里面,所以async不是一个选项),您可以使用TaskAwaiter而是通过链接这两种方法:

var folder = Package.Current.InstalledLocation.GetFolderAsync("folderName").GetAwaiter().GetResult();

这不会抛出InvalidOperationException ,也导致死锁。



Answer 3:

你应该awaitvar 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


文章来源: A method was called at an unexpected time