【问题标题】:WCF: Is it safe to spawn an asynchronous worker thread on the server?WCF:在服务器上生成异步工作线程是否安全?
【发布时间】:2011-01-15 11:08:08
【问题描述】:

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

BackgroundWorker 是要走的路,还是有更好的方法或在 WCF 服务中这样做有问题?

【问题讨论】:

    标签: wcf asynchronous


    【解决方案1】:

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

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

    一般BackgroundWorker 会在需要由 GUI 应用程序执行后台任务时讨论。例如,System.ComponentModel.BackgroundWorker 的 MSDN 页面专门引用了一个 UI 用例:

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

    这并不是说它不能在服务器端使用,而是该类的意图是在 UI 中使用。

    【讨论】:

    • 您能否详细说明是什么让 BackgroundWorker 对 UI 更有用,以及为什么 ThreadPool 在这种情况下更好?
    • @Mike 看看 BackgroundWorker 命名空间 :-)
    猜你喜欢
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2010-11-11
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多