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

标签 wcf asynchronous

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

BackgroundWorker 是可行的方法,还是有更好的方法或在 WCF 服务中执行此操作有问题?

最佳答案

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

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

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

The BackgroundWorker class allows you to run an operation on a separate, dedicated thread. Time-consuming operations like downloads and database transactions can cause your user interface (UI) to seem as though it has stopped responding while they are running. When you want a responsive UI and you are faced with long delays associated with such operations, the BackgroundWorker class provides a convenient solution.

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

关于WCF:在服务器上生成异步工作线程是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2240251/

相关文章:

wcf - 在双工系统WCF中如何区分不同的 channel 实例?

c# - MessageSecurityException 没有为具有 'http://...' 操作的消息指定签名消息部分

asynchronous - ServiceStack 和 OrmLite 中的异步支持

javascript - Promise.all 在 firebase 中使用 getDownloadURL()

c# - C# 中的 Async Func - 正确的 async await 用法

javascript - 处理异步函数的同步方式,两层深度

wcf wsHttpBinding 和禁用匿名访问

wcf - WCF net.tcp 绑定(bind)分布式事务超时问题

wcf - 如何将裸结果返回给 WCF 客户端

JavaScript:暂停函数并等待全局变量