【问题标题】:Using ThreadPool.QueueUserWorkItem in WCF method在 WCF 方法中使用 ThreadPool.QueueUserWorkItem
【发布时间】:2012-04-25 02:24:49
【问题描述】:
我需要在 WCF 方法中运行大约需要 25-30 秒的后台逻辑,而该方法的完成时间不会超过 1 秒。我决定在退出 Web 方法之前将该逻辑包装到 WaitCallback 中并传递给 ThreadPool.QueueUserWorkItem。最初它工作正常,但现在我有第二个想法,因为我怀疑有时 QueueUserWorkItem 方法不会及时返回,因为 Web 方法不会在 1 秒内定期响应。在 WCF 方法中使用 QueueUserWorkItem 是否有任何问题?
【问题讨论】:
-
ThreadPool.QueueUserWorkItem 有点过时了。您应该考虑使用TPL。为克里斯的回应 +1。
标签:
wcf
threadpool
queueuserworkitem
【解决方案1】:
不,不是这样,但您的问题涉及一个更普遍的问题,如何处理长时间运行的服务调用?您可以:
- 更改配置以使客户端和服务器能够容忍长时间的服务调用,即增加超时时间
-
或者,使用开始/获取当前进度/获取最终结果 API 设计您的服务调用,所有这些都快速返回:
int jobID = serviceProxy.StartJob();
float progress = serviceProxy.GetJobProgress(int jobID);
Result finalResult = serviceProxy.GetJobResult(int jobID);
这是更多的工作,但更好的设计,您现在还必须维护一个正在运行的作业列表(您的异步处理可以使用 QueueUserWorkItem 或其他),但所有服务调用都会很快返回。