2011-06-01 60 views
0

我正在研究一個類庫,其中一個類負責從互聯網上使用XDocument.Load(url)檢索一個Xml文件。鑑於此操作可能需要幾秒鐘才能完成,因此可以在自己的線程上運行它。.Net類庫:線程的責任

誰來負責創建這個線程?消費者或檢索文件的類?有關於此的最佳做法嗎?

+1

當你讓你的類庫多線程,請注意鎖定。在高負載環境(服務器應用程序)中,這可能會很快收到數千個鎖。相應地使用任務並行庫和/或併發集合來幫助最大限度地減少鎖定,否則庫會很快崩潰並燒燬。 – drharris 2011-06-01 06:58:29

+0

@drharris非常感謝您的建議! – aligray 2011-06-01 07:14:08

回答

5

最佳實踐是實現異步模式。這意味着如果您的班級擁有LoadXml方法,那麼您還需要執行LoadXmlAsync方法和某種OnCompleted事件。

你可以閱讀一下here

+1

這是最好的選擇,但請記住,它只適用於短期考慮的活動,例如在這種情況下加載文件。異步不會用於像串口偵聽器線程這樣的事情,這將會長時間運行。在這種情況下,類庫不應該處理線程,而是要求用戶用自己的線程來包裝一個'Listen()'方法。 – drharris 2011-06-01 06:28:41

2

我認爲這兩種選擇都不錯。這也取決於你有多少地方會使用這種方法來獲取數據。如果它在多個地方使用,那麼在檢索文件的類中安排線程是非常有意義的。

我個人會去找最後一個,因爲如果我需要在更多地方使用它(可能以後),這會給我更多的靈活性。

想到這個問題時,我們想到了前綴方法BeginDoSomeOperation和EndDoSomeOperation,它會給最後一個選項帶來更多的功勞。