在 WCF 方法中使用 ThreadPool.QueueUserWorkItem



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

不,不是这样,但您的问题涉及一个更普遍的问题,如何处理长时间运行的服务调用? 您可以:

  1. 更改配置,以便客户端和服务器允许长时间的服务调用,即增加超时
  2. 或者,使用开始/获取当前进度/获取最终结果 API 设计服务调用,所有这些 API 都会快速返回:

    int jobID = serviceProxy.StartJob();
    float progress = serviceProxy.GetJobProgress(int jobID);
    Result finalResult = serviceProxy.GetJobResult(int jobID);
    

这是更多的工作,但更好的设计,你现在还必须维护一个正在运行的作业列表(你的异步过程,可以使用QueueUserWorkItem或其他任何东西),但所有服务调用都会很快返回。

相关内容

  • 没有找到相关文章

最新更新