如何等待所有异步操作?

时间:2013-05-05 15:16:47

标签: c# .net-4.5 async-await

我使用递归函数来做某事

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 =“完成!”;只有在所有迭代结束后才会完成。现在,它正在进行迭代的同时发生。如果我像那样运行这个功能

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

结果仍然相同。当这个功能完全结束时如何等待?

1 个答案:

答案 0 :(得分:4)

您不等待完成对walk函数的子调用。 因此,您所要做的就是将其更改为await walk(subDir)。但是,由于您无法等待void函数,因此您必须稍微更改它才能使其正常工作。 要使您的步行功能等待,请将返回类型更改为Task,如下所示:

public async Task walk(StorageFolder folder)