在WCF方法中使用ThreadPool.QueueUserWorkItem

时间:2012-04-24 18:09:49

标签: wcf threadpool queueuserworkitem

我需要在WCF方法中运行一个大约需要25-30秒的后台逻辑,完成时间不会超过1秒。我决定将该逻辑包装到WaitCallback中,并在退出Web方法之前将其传递给ThreadPool.QueueUserWorkItem。最初它工作正常,但现在我有了第二个想法,因为我怀疑有时QueueUserWorkItem方法没有及时返回因此web方法在1秒内没有定期响应。在WCF方法中使用QueueUserWorkItem是否有任何问题?

1 个答案:

答案 0 :(得分:1)

不是不是这样,但你的问题触及了一个更普遍的问题,如何处理长期服务电话?你可以:

  1. 更改配置,以便客户端和服务器容忍长时间的服务呼叫,即增加超时
  2. 或者,使用start / get current progress / get final result API设计服务调用,所有这些都快速返回:

    int jobID = serviceProxy.StartJob();
    float progress = serviceProxy.GetJobProgress(int jobID);
    Result finalResult = serviceProxy.GetJobResult(int jobID);
    
  3. 这是更多的工作,但更好的设计,你现在还必须维护一个正在运行的作业列表(你的异步程序可以使用QueueUserWorkItem或其他),但所有的服务调用都会很快返回。