Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/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
C# 是否有特定的设计模式来帮助管理外部连接和并发请求?_C#_Multithreading_Design Patterns - Fatal编程技术网

C# 是否有特定的设计模式来帮助管理外部连接和并发请求?

C# 是否有特定的设计模式来帮助管理外部连接和并发请求?,c#,multithreading,design-patterns,C#,Multithreading,Design Patterns,我目前正在为web应用程序使用外部API。当用户单击按钮时,我打开连接,进行适当的呼叫,然后关闭连接。但是,在多线程web环境中,当同时单击两次时,应用程序会崩溃。。。这是由于连续调用紧密连接造成的 理想情况下,我希望在第一次请求时打开连接,然后拨打所有电话。。如果一个并发请求进入,并且它看到有一个打开的连接,那么它应该使用它。。只有在当前没有处理请求的情况下,才应关闭连接 我开始编写一些代码来实现我想要的,但我想知道是否有任何人都知道的解决这个问题的特定设计模式,或者是否有任何人有任何建议。。

我目前正在为web应用程序使用外部API。当用户单击按钮时,我打开连接,进行适当的呼叫,然后关闭连接。但是,在多线程web环境中,当同时单击两次时,应用程序会崩溃。。。这是由于连续调用紧密连接造成的

理想情况下,我希望在第一次请求时打开连接,然后拨打所有电话。。如果一个并发请求进入,并且它看到有一个打开的连接,那么它应该使用它。。只有在当前没有处理请求的情况下,才应关闭连接


我开始编写一些代码来实现我想要的,但我想知道是否有任何人都知道的解决这个问题的特定设计模式,或者是否有任何人有任何建议。。谢谢

我想你在找。

我不知道头顶上有没有合适的图案。

1-为每个请求建立新连接的成本有多高

2-图书馆作者是否发布了限制连接数量的指南? 如果没有,那么在设计中根本不引入锁定或多线程将非常有用

这是我在进入多线程场景之前对自己提出的最初问题

同样,在上面解释的情况下,您永远无法确定下一个请求何时到来,因此如果您使用的是类的单个对象,那么使用双重检查锁定技术(如wikipedia中所述)将非常有用


您使用什么编程语言和平台?我相信大多数平台都支持连接池——你所说的“连接”是什么意思?它是一个应用程序会话吗?@BorisTreukhov,我正在使用C#和ASP.NET MVC3。我正在使用一些第三方库,它们基本上有3个命令:1.ConnectSocket、2.TransferData和3。断开插座。。。所谓连接,我指的是第三方API打开套接字连接。。所以问题在于,连续调用DisconnectSocket时,第三方库崩溃,这是我在多线程设置中看到的一个问题。。。就像一个web应用程序。我的第一个想法是连接池加命令模式。在调用
DisconnectSocket
之前,你能检查一下连接是否“未关闭”吗?你也确信这个连接是线程安全的吗?在一个多线程的安装中,我会考虑使用一个队列和基于消息的安装程序来完全抽象你的应用程序远离底层数据存储,并允许你更容易地扩展。不会锁定其他请求吗?@ RAMunas是的。这样你就可以计算你有多少个连接。对于“昂贵”问题+1。如果我们谈论的是sqlserver连接,那么它们已经被池化了。