【问题标题】:How to wait all asynchronous operations?如何等待所有异步操作?
【发布时间】:2013-05-06 01:47:41
【问题描述】:

我用递归函数做某事

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!";

结果还是一样。如何等待此功能完全结束?

【问题讨论】:

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


    【解决方案1】:

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

    public async Task walk(StorageFolder folder)
    

    【讨论】:

    • 确实,您几乎应该永远拥有void async 方法...它们基本上只是为了允许事件处理程序异步而存在。
    猜你喜欢
    • 2013-08-10
    • 2023-03-27
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2016-12-26
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    相关资源
    最近更新 更多