2012-02-27 30 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

回答