![](/img/trans.png)
[英]Is manual acknowledgment of IModel thread-safe in RabbitMq .net client?
[英]Are .NET WSE client stubs thread-safe?
好吧,对于简短的回答是线程安全,是的。 原因是服务的服务器端将有更多关于线程功能的客户端连接。 客户端只是一个代理,以服务器可以理解的方式布局请求。 它什么都不知道。 它是一个基本类,除了与服务器的连接之外没有外部访问。 因此,只要服务器允许多个连接,您就可以了。 因此没有资源争用(除了服务器能够处理您的所有请求)。
在客户端,您可以让多个线程使用相同的类但不同的实例。 这可能是首选方案,因此每个事务都可以是原子事务。 对于共享实例,您必须处理自己的线程锁定类本身的访问,否则您可能会遇到代码内部资源的竞争条件。
还可以进行异步调用。 wsdl工具生成的存根将创建开始,结束调用方法,以便您可以提供回调方法,以有效地允许您提交请求并继续您的代码,而无需等待回复。 对于单个实例的第二个场景,这可能是最好的。
但是,它还取决于服务器组件的编码方式。 如果它是一个Web服务,您应该能够同时提交多个请求。 但是,如果它是基于套接字的服务,您可能需要在您的端部进行一些额外的编码,以便处理多个传入连接,甚至创建套接字。
因此,简而言之,不同的实例与服务器端限制内的单线程执行行为相同,能够处理多个并发连接。
至于单个实例,如果你使用回调过程,这可以让你得到你想要的东西而不用太多头痛。 但是,它也受限于服务器端代码的限制。
我说明服务器限制的原因是,有些公司将构建限制来自出站主机的连接数的Web服务,因此您的吞吐量受此限制。 因此,您可以使用的有效线程数将减少或过时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.