2013-05-05 7 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' async विधि होनी चाहिए ... वे मूल रूप से केवल ईवेंट हैंडलर्स अनुमति देने के लिए उपस्थित रहे असीमित होने के लिए। –

+0

Thanx! यह काम करता है! – splash27

संबंधित मुद्दे

 संबंधित मुद्दे