Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WCF方法中使用ThreadPool.QueueUserWorkItem_Wcf_Threadpool_Queueuserworkitem - Fatal编程技术网

在WCF方法中使用ThreadPool.QueueUserWorkItem

在WCF方法中使用ThreadPool.QueueUserWorkItem,wcf,threadpool,queueuserworkitem,Wcf,Threadpool,Queueuserworkitem,我需要在一个WCF方法中运行一个后台逻辑,该逻辑大约需要25-30秒,完成时间不能超过1秒。我决定将该逻辑包装到WaitCallback中,并在退出web方法之前将其传递给ThreadPool.QueueUserWorkItem。最初它工作正常,但现在我有了第二个想法,因为我怀疑有时QueueUserWorkItem方法不会及时返回,结果web方法不会定期在1秒内响应。在WCF方法中使用QueueUserWorkItem有什么问题吗?没有,但您的问题涉及到一个更普遍的问题,如何处理长时间运行的服

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

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

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

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

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

    不是这样,但您的问题涉及到一个更一般的问题,如何处理长时间运行的服务呼叫?您可以:

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

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

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

    ThreadPool.QueueUserWorkItem有点过时。你应该考虑使用+。Chris的response.ThreadPool.QueueUserWorkItem的1有点过时。你应该考虑使用+。1.克里斯的回答。