2013-08-27 80 views
1

我目前正在實施文件掃描實用程序,並已實施以下步驟來創建掃描多個文件夾的並行任務,並在掃描正在進行時保持GIU響應。任務並行 - 我錯過了什麼?

var task = Task.Factory.StartNew(() => scanFiles(findType, location)); 

上面的行位於3個重載中,其中一個重複遍歷多個位置值。

這是在使用BackgroundWorker進行了一些實驗後發現的,並且在創建多個BackgroundWorkers時遇到了日誌文件訪問等方面的限制。

雖然我是一線解決方案的狂熱粉絲,但我擔心我錯過了一些東西。該應用程序運行良好,並正在完美工作。這真的很容易,或者我在處理多項任務時缺少一些重要的東西嗎?

+1

是的,這是多虧了[.NET任務並行庫](http://msdn.microsoft.com/en-us/library/dd460717.aspx)。關於日誌的侷限性,只有一個文件不能一次被多個寫入者訪問。如果您正在編寫日誌,請在並行任務之外執行此操作,或者使用異步(異步)方法編寫日誌,以便它不會一次調用多次。 –

+0

感謝您的提示 - 我已經有一個功能來記錄細節。日誌中的條目可以混合,因爲它們在以後的Excel中被詢問。快樂的日子:-) – bhs

回答

0

難道這真的很容易,或者我在處理多項任務時缺少一些主要的東西嗎?

您在上述代碼中所做的只是創建一個新線程並在該線程上運行您的方法。如果這是你的直覺而不是你做得很好。

+2

這不是準確的。創建一個'線程'是相對昂貴的操作,這就是TPL使用線程池的原因,因此每次都不會創建新的線程。 – svick