2013-05-05 40 views
5

tôi sử dụng hàm đệ quy để làm điều gì đóLàm thế nào để chờ đợi tất cả các hoạt động không đồng bộ?

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

Vì vậy, tôi muốn điều đó tbOut.Text = "Xong!"; sẽ chỉ được thực hiện sau khi tất cả các lần lặp lại kết thúc. Hiện tại nó xảy ra cùng một lúc trong khi lặp lại trong quá trình. Nếu tôi chạy chức năng này như vậy

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

kết quả vẫn như cũ. Làm thế nào để chờ đợi khi chức năng này sẽ kết thúc hoàn toàn?

Trả lời

4

Bạn không chờ đợi hoàn thành các cuộc gọi phụ của bạn đến chức năng đi bộ của bạn. Vì vậy, tất cả những gì bạn phải làm là thay đổi nó thành await walk(subDir). Tuy nhiên, vì bạn không thể chờ đợi một hàm void, bạn sẽ phải thay đổi nó một chút để làm cho nó hoạt động. Để thực hiện chức năng đi bộ của bạn awaitable thay đổi kiểu trả về để Task như vậy:

public async Task walk(StorageFolder folder) 
+3

Thật vậy, bạn nên gần như không bao giờ * * có một 'phương pháp async void' ... họ về cơ bản chỉ có mặt để cho phép xử lý sự kiện để không đồng bộ. –

+0

Thanx! Điều đó hoạt động! – splash27

Các vấn đề liên quan