WCF:在服务器上生成异步工作线程是否安全?

时间:2010-02-10 20:51:27

标签: wcf asynchronous

我有一个WCF服务方法,我想异步执行一些操作(这样返回调用者几乎没有额外的延迟)。在方法中生成System.ComponentModel.BackgroundWorker是否安全?我实际上是用它来调用其他一个服务方法,所以如果有办法异步调用其中一个,那就可以了。

BackgroundWorker是一种可行的方式,或者在WCF服务中有更好的方法或问题吗?

1 个答案:

答案 0 :(得分:5)

BackgroundWorker更适合在UI中使用。在服务器上,您应该考虑使用ThreadPool。

when-to-use-thread-pool-in-c对何时使用线程池有一个很好的说明。实质上,在处理服务器上的请求时,出于多种原因通常最好使用线程池。例如,随着时间的推移,您不会产生创建新线程的额外开销,并且池会在任何给定时间限制活动线程的总数,这有助于在负载下节省系统资源。

一般情况下,当GUI应用程序需要执行后台任务时,会讨论BackgroundWorker。例如,System.ComponentModel.BackgroundWorker的MSDN页面专门指UI用例:

  

BackgroundWorker类允许您在单独的专用线程上运行操作。下载和数据库事务等耗时的操作可能会导致用户界面(UI)在运行时停止响应。当您需要响应式UI并且您遇到与此类操作相关的长时间延迟时,BackgroundWorker类提供了一种方便的解决方案。

这并不是说它无法在服务器端使用,但该类的目的是在UI中使用。