编辑(再次):让我简化我的问题。我有一个Windows服务,它暴露了一些WCF终端用类似的方法:从Windows服务处理长时间运行的操作
int ExecuteQuery(string query) {
// asynchronously execute query that may take 1 second to 20 minutes
return queryId;
}
string GetStatus(int queryId) {
// return the status of the query (# of results so far, etc)
}
什么是实现ExecuteQuery
方法的最佳方法是什么?我应该打电话ThreadPool.QueueUserWorkItem
让我的查询进行吗?
请注意,执行查询后的实际工作是由负载均衡黑匣子完成的。我希望能够同时进行多个查询。
这个比喻是一个网络浏览器,它可以同时下载多个文件,并且你有一个下载管理器可以跟踪每个文件的状态。
我想我可能在这里大声思考,并让我的问题看起来比以前更复杂。有很多“建议”表示“不要过度使用ThreadPool,尤其是对于长时间运行的任务”。我只想看看是否有任何针对我的问题的建议。 – intoOrbit 2010-03-10 15:29:33
有一种情绪反对在ThreadPool中使用“长时间运行”的任务,因为如果任务正在等待另一个任务执行某项工作,并且该任务正在等待在同一个ThreadPool中执行,但是ThreadPool已满,那么排队任务可能永远不会被执行,并且会导致死锁。即使在短时间运行的任务中也会发生这种情况我想如果有人遇到这个问题,那么他们只是错误地设计了他们的程序。 – Kiril 2010-03-10 15:51:22