Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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#_Threadpool_Reusability - Fatal编程技术网

C#无线程池的线程重用

C#无线程池的线程重用,c#,threadpool,reusability,C#,Threadpool,Reusability,我有几个同一类的实例。在类的生存期内,对这个类的每个方法调用都应该在同一个线程上执行。但对于每一个例子,我需要一个不同的线程。 我考虑过线程池,但似乎我对它的控制太少了 如何在不使用ThredPool的情况下重用线程 谢谢大家!!马丁 编辑(为什么我需要这个): 我必须使用win32 dll来访问第三方产品的业务逻辑。此dll不是为多线程环境(如web应用程序)而设计的。当我以ASP经典模式(STA线程)运行我的ASP.NET MVC应用程序时,到目前为止一切正常。但问题是,所有用户都会相互阻止

我有几个同一类的实例。在类的生存期内,对这个类的每个方法调用都应该在同一个线程上执行。但对于每一个例子,我需要一个不同的线程。 我考虑过线程池,但似乎我对它的控制太少了

如何在不使用ThredPool的情况下重用线程

谢谢大家!!马丁

编辑(为什么我需要这个): 我必须使用win32 dll来访问第三方产品的业务逻辑。此dll不是为多线程环境(如web应用程序)而设计的。当我以ASP经典模式(STA线程)运行我的ASP.NET MVC应用程序时,到目前为止一切正常。但问题是,所有用户都会相互阻止。该组件还维护一些状态。一旦另一个线程正在访问这个组件,它将无法识别我必须为每个方法调用传递的连接句柄。我在登录过程后获得了连接句柄。我想再次将我的web应用程序置于MTA模式,并使用worker概念,将大约10个用户分配给一个worker(最多10个用户应该相互阻止)。一个工作线程应该始终使用同一个线程来执行api调用,这样组件就不会中断。 我对这种情况不满意,但我必须找到一个可以接受的解决办法

更新-找到解决方案: 多亏了AMIBAR提供的“智能线程池”,我才能够(轻松地)实现我所期望的行为。对于每个工作线程,我现在都有自己的线程池实例,其中最大和最小线程数为一个线程。好吧,这不是线程池的概念,但是它使处理工作项变得非常容易,并且它还有一些很好的其他特性。web应用程序正在MTA上运行。 我将准备一些负载测试,看看它是否在几个小时内稳定。
请参见此处:

如果线程在死亡前将数据保存到对象,那么每次创建新线程或使用线程池中的线程时会出现什么问题?为什么每个对象需要不同的线程?这听起来不太具有可伸缩性(当然,如果实例数量很少,也可以),您想“重用线程”还是“需要其他线程”?我想重用线程。刚刚从CodeProject上的Ami栏中找到了一个可能的解决方案:如果线程在死亡之前将数据保存到对象,那么每次创建新线程或使用线程池中的线程会有什么问题?为什么每个对象需要不同的线程?这听起来不太具有可伸缩性(当然,如果实例数量很少,也可以),您想“重用线程”还是“需要其他线程”?我想重用线程。刚刚从CodeProject上的Ami栏中找到了一个可能的解决方案: