2012-02-27 173 views
2

我們使用Ami Bar的.Net 3.5和C#SmartThreadPool來管理多個工作項目。當我們的應用程序關閉時,我們想要「告訴」所有工作項目,他們應該儘快完成他們的工作,然後給他們一個寬限期來完成,然後殺死仍在運行的項目。我們的工作項目是合作的,他們需要能夠檢查他們是否被「告知」完成工作並擺脫長時間運行的循環。如何使用SmartThreadPool取消等待殺死一個工作項?

這聽起來像是一個好主意,使用workItemResult.Cancel(false)來「告訴」工作項完成,然後使用工作項內的SmartThreadPool.IsWorkItemCanceled來停止工作,但事實證明,WaitAll不會等待取消物品,因此我們不能阻止寬限期。

我開始爲每個工作項創建一個WorkItemGroup,在工作項上調用Cancel(false),然後調用workItemGroup.WorkForIdle(gracePeriod),但想檢查這是否值得追求。

我會很感激這方面的任何想法。

感謝

+0

你爲什麼不使用'Task's? – svick 2012-02-27 18:57:35

+0

對不起,我忘了提及我們正在使用.Net 3.5並且升級到4.0在這一點上是不可行的。我相信任務類是在.NET 4.0中引入的。 – alecswan 2012-02-27 21:19:27

回答