2011-05-19 59 views
0

我有一個線程數組,其中每個線程從線程搜索管理器獲取搜索任務 - 使用生產者/消費者模塊 - 當它完成時,它會等待直到從搜索管理器發出的下一個信號線。搜索是通過網絡進行的 - 並且需要大量時間(主要是獲取html數據部分)。 我的問題是,當用戶選擇停止當前搜索並開始一組新搜索時,所有搜索都在上一次網絡搜索期間忙碌,所以當前,用戶一直等待,直到不再相關的搜索結束其任務並開始新的一個。C#線程方法重置問題

我的問題是 - 我該如何立即開始新的相關任務? 我無法使用標誌(指示線程跳過搜索),因爲長時間等待get http方法。 有沒有辦法積極停止該方法並從頭開始?提前(我不喜歡使用新的線程...)

感謝,

Shmouel。

+2

*: http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.abort.aspx

鏈接到原來的線程?這是最明顯的選擇。設置一個標誌來告訴現有的操作不再需要它,並啓動一個新的線程。 – 2011-05-19 08:47:04

+2

將線程專用到IO綁定的操作將會產生過多的開銷。更好地使用任務,其中已包括支持請求取消(通過['CancelationToken'](http://msdn.microsoft.com/en-us/library/system.threading.cancellationtoken.aspx)。這樣你可以避免所有需要實現和維護你自己的線程池在任務實現中使用盡可能多的異步IO可以減少正在使用的線程數,從而提高應用程序的性能 – Richard 2011-05-19 08:53:11

+0

如果你有權訪問.NET 4,任務 – 2011-05-19 08:54:29

回答

0

我發現了一個應該使用的類似的stackoverflow線程。訣竅是使用BeginGetResponse代替GetResponse的,以呼籲HTTP請求中止:爲什麼*您不想使用一個新的線程 Killing HttpWebRequest object using Thread.Abort

+0

@ user680811我也不能更改(至少不是沒有嚴重的代碼更改:-))http請求方法... 但是,如果我不會有任何其他選項,我會使用它。謝謝! – Shmouel 2011-05-19 09:15:08