2013-05-05 16 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は=「完了!」というほしいです。すべての反復が終了した後にのみ実行されます。今はiterationsが処理中に同時に起こっています。このような関数を実行すると、結果は同じです。この機能が完全に終了するのを待つ方法は?

答えて

4

ウォーク機能のサブ呼び出しが完了するのを待っていません。 あなたがしなければならないのは、await walk(subDir)に変更するだけです。しかし、void関数を待つことができないので、それを動作させるには少し変更する必要があります。

public async Task walk(StorageFolder folder) 
+3

確かに、あなたはほとんど* * 'void'非同期メソッドを持つべきではありません...彼らは基本的にのみ存在し、イベントハンドラを許可するようにしている:あなたの歩行機能は非常に似Taskに戻り値の型を変更awaitableようにするに 非同期にする。 –

+0

Thanx!それは動作します! – splash27