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

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

结果仍然一样。此功能何时完全结束?

回答

4

您不需要等待完成您的步行功能的次呼叫。 所以你所要做的就是把它改成await walk(subDir)。但是,由于您无法等待无效函数,因此您必须稍作更改才能使其正常工作。 为了使您的步行功能awaitable返回类型更改为Task像这样:

public async Task walk(StorageFolder folder) 
+3

事实上,你应该几乎从不* *有'void'异步方法......他们基本上只是用来让事件处理程序是异步的。 – 2013-05-05 15:28:36

+0

Thanx!这样可行! – splash27 2013-05-05 15:36:28