我对async / await模式相对较新,但我试图加快速度,因为我使用的是仅暴露异步方法的第三方API。我需要编写一个递归方法来遍历目录结构。例如,假设结构如下所示:
/(root)
Folder1/
Folder3/
Folder4/
Folder2/
Folder5/
Folder6
我最初的抓取版本是"完全"异步版本,它看起来像这样:
Async Function GetFolderContents(thisPath) As Task(Of Blah())
Dim result as Blah()
thisFolderContents = await _thirdPartyAsyncMethod.GetContents(thisPath)
For Each singleFolder In thisFolderContents
result.Add(singleFolder)
result.AddRange(await GetFolderContents(singleFolder))
Next
Return result
End Function
每当我尝试调用此方法时,我都无法获得Folder2或其子项的任何结果 - 我只能让它返回Folder1及其子项。基于我对async / await的脆弱知识,我有点理解为什么会这样(尽管我已经完全准备承认我可能做错了)。
我可以通过从方法定义中删除Async并使用第三方异步方法的.Result来使其按预期方式工作:
thisFolderContents = _thirdPartyAsyncMethod.GetContents(thisPath).Result
即使这似乎有用,我的问题是,应该我这样做吗?我收集这些方法是异步的原因,这种方法有效地使同步。在调用您没有编写的异步方法时是否有更合适的方法来实现递归,或者这是使用.Result是唯一的方法的边缘情况之一?