2013-05-05 18 views
5

Ben Yani mutlakaTüm asenkron işlemler nasıl beklenir?

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

yapmak özyinelemeli işlevini kullanın, bunu tbOut.Text = "! Bitti" istiyor; tüm iterasyonlar bittikten sonra yapılacaktır. Şu anda süreçte yinelemeler devam ederken aynı zamanda oluyor. Bu işlevi

sonucu çalıştırırsam, sonuç hala aynıdır. Bu işlev tamamen bittiğinde nasıl beklenir?

cevap

4

Alt aramalarınızın tamamlanmasını yürüyüş işlevinize beklemezsiniz. Yani, tek yapmanız gereken onu await walk(subDir) olarak değiştirmektir. Bununla birlikte, bir boşluk fonksiyonunu bekleyemeyeceğinizden, çalışmasını sağlamak için biraz değiştirmelisiniz. onlar temelde olay işleyicileri izin vermek için sadece mevcut konum ... Sanki * asla * Bir `void` zaman uyumsuz yöntem olmalıdır, Nitekim

public async Task walk(StorageFolder folder) 
+3

: sizin yürüyüş fonksiyonu şöyle Task dönüş türünü değiştirmek awaitable yapmak için asenkronize olmak. –

+0

Thanx! Bu işe yarıyor! – splash27

İlgili konular