[C#] using multiple await in async method for searching certain string in txt files

這次的目標是要在async方法中執行多階段的多執行緒,
在第一個執行緒中過濾出符合時間範圍的文字檔,同時讓progressBar循環跑動,完成後顯示過濾出幾個檔案,
接下來在第二個執行緒中搜尋,檔案中是否有符合的字串,同時讓progressBar從0%隨著進度跑到100%。

第二個執行緒是在前一篇文章已經完成了,可是不知道為什麼progressBar都只會跑到99%附近,messageBox就跳出來了...不過這個可以過幾天再來研究。

第一個想法是寫一個Task.Factory.StartNew來做過濾檔案的動作,再加上ContinueWith來更新UI,不過照前面的寫法加進去之後,在Task前面還是要加上await,結果就是在async方法裡面有兩個await方法,只是感覺ContinueWith那邊有點冗長,也因此我就想試試第二個想法。

第二個想法是把要用多執行緒的方法,類別外面再包一個Task,變成Task<List<string>>。
我想在主函式中只要直接用這個方法,前面再加上await就可以了,可是在改寫方法的時候遇到了一點問題,函式傳回的值類型也需要是Task<List<string>>,而不能是List<string>。

後來又回去重新看了一下第一篇自己貼過的其他方法,既然一個async方法內可以放多個await,根本不用去改寫要開執行緒的方法...只要用await Task.Run或await Task.Factory.StartNew就可以了。

解法二

沒想到查到正確的方法以後,只花了兩天就可以有這麼多進展,前一次在研究多執行緒的時候好像搞了很久UI還是會鎖死。
下禮拜有空再來研究async/await的暫停或停止方法。

今天才注意到,async/await是.net 4.5才能用的語法...4.0用的要繼續查了

留言

這個網誌中的熱門文章

[python] nginx + uwsgi + django 環境部署

台灣人在上海辦台胞證換發