如何等待所有异步操作?
问题描述:
我用递归函数做一些如何等待所有异步操作?
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!";
结果仍然一样。此功能何时完全结束?
答
您不需要等待完成您的步行功能的次呼叫。 所以你所要做的就是把它改成await walk(subDir)
。但是,由于您无法等待无效函数,因此您必须稍作更改才能使其正常工作。 为了使您的步行功能awaitable返回类型更改为Task
像这样:
public async Task walk(StorageFolder folder)
事实上,你应该几乎从不* *有'void'异步方法......他们基本上只是用来让事件处理程序是异步的。 – 2013-05-05 15:28:36
Thanx!这样可行! – splash27 2013-05-05 15:36:28