c# - 如何等待所有异步操作?

标签 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 = "Done!";只有在所有迭代结束后才会完成。现在它在迭代过程中同时发生。如果我像那样运行这个函数

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

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

最佳答案

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

public async Task walk(StorageFolder folder)

关于c# - 如何等待所有异步操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385961/

相关文章:

c# - C#从mysql获取数据的问题

c# - 在 Render() 方法期间错误地写入 writer 时出现困惑

c# - 扩展方法中where子句关键字的含义

.net - GetGetMethod 方法和 GetMethod 属性之间的区别?

.net - wcf AddressAlreadyInUseException

c# - ORA-01008 : Not all variables bound with nulls

c# - WebClient、Zip、Windows 8 Metro 中的隔离存储

.net-4.0 - 使用 VS2010 Async CTP 的主要风险与好处是什么?

c# - 我想等待抛出 AggregateException,而不仅仅是第一个异常

c# - 如何在主窗口外使用 ShowProgressAsync 进度条?