如何等待所有异步操作完成?

5
我使用递归函数来完成某些操作。
public async void walk(StorageFolder folder)
{
   IReadOnlyList<StorageFolder> subDirs = null;
   subDirs = await folder.GetFoldersAsync();
   foreach (var subDir in subDirs)
   {
      var dirPath = new Profile() { FolderPath = subDir.Path};
      db.Insert(dirPath);
      walk(subDir);
   }
   tbOut.Text = "Done!";
}

所以,我希望当所有迭代结束后才执行tbOut.Text = "Done!";。现在它与迭代同时发生。如果我像这样运行函数

walk(fd);
tbOut.Text = "Done!";

结果仍然相同。如何等待此函数完全结束?
1个回答

4

您不需要等待walk函数中的子调用完成。所以,您只需将其更改为await walk(subDir)即可。但是,由于您不能等待一个void函数的完成,所以您需要对其进行一些更改才能使其正常工作。为了使您的walk函数可以等待,请将返回类型更改为Task,如下所示:

public async Task walk(StorageFolder folder)

3
事实上,你几乎永远不应该有一个 void 异步方法……它们基本上只存在是为了允许事件处理程序异步执行。 - Jon Skeet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接