Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.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
Sql 在dotnet中引入多线程而不创建新线程是否可能?_Sql_Multithreading_Parallel Processing_Reentrancy - Fatal编程技术网

Sql 在dotnet中引入多线程而不创建新线程是否可能?

Sql 在dotnet中引入多线程而不创建新线程是否可能?,sql,multithreading,parallel-processing,reentrancy,Sql,Multithreading,Parallel Processing,Reentrancy,我有几百个项目需要处理 通过有条件地设置全局SQLConnection来处理每个项目,其中在处理过程中使用此SQLConnection处理项目 因此,不允许并行处理这些项目是至关重要的 我理解这不是一个好的设计,我希望在可行的情况下尽快纠正它 然而,尽管我尽了最大的努力,这段代码似乎正在经历某种形式的多线程。不知何故,其中一个任务引发了异常 此异常违反了外键约束,但表示它是针对一个SQLConnection操作的,而该SQLConnection不需要连接 当然,我对此很担心,但据我所知,这个应用

我有几百个项目需要处理

通过有条件地设置全局SQLConnection来处理每个项目,其中在处理过程中使用此SQLConnection处理项目

因此,不允许并行处理这些项目是至关重要的

我理解这不是一个好的设计,我希望在可行的情况下尽快纠正它

然而,尽管我尽了最大的努力,这段代码似乎正在经历某种形式的多线程。不知何故,其中一个任务引发了异常

此异常违反了外键约束,但表示它是针对一个SQLConnection操作的,而该SQLConnection不需要连接

当然,我对此很担心,但据我所知,这个应用程序中没有多线程代码

我想知道有没有可能在不显式创建新线程的情况下引入多线程

编辑:

  • VB.NET3.5SP1
  • 控制台应用程序+类库
  • 偶尔调用web服务
  • 进行SQL调用
  • 没什么别的了。没有Winforms,就没有WPF
是-使用System.Timers.Timer和/或System.Threading.Timer可能会造成您描述的效果。每当计时器计时,一个新的工作项就会在线程池中排队,因此本质上就是一个多线程程序,而无需显式创建新线程

如果计时器是自动重置(在调用“已过”后保持启用状态),则可能会导致同时对同一处理程序进行另一次调用。

或者,任务(即任务对象)不是线程,而是线程。任务通常位于lambda表达式附近,请检查是否有任务

哦,还有异步套接字和所有其他异步IOs

但是:


与不惜一切代价避免多线程相比,锁定不是更容易吗?很抱歉,如果这个问题太幼稚,我可能会错过一些东西。

除了前面提到的其他东西:并行扩展(PLINQ和任务并行库)。

可能是您的代码是从第三方库调用的。通过使用事件,另一个库可以从任意多个线程调用您的代码。

我建议您检查调用更改代码的代码,并确保没有可疑的代码调用

很好的建议-投票表决。但是,此代码中未使用套接字。和.NET3.5(应该提到这一点)所以没有任务只是出于好奇,如果不使用套接字,您是否使用管道?你在问题中提到了一个连接。对不起,我指的是数据库的SQLConnection。可以选择几个数据库。都有相似的结构。为了反映这一点,我修改了我的问题。我根本不是C#方面的SQL专家,但API很可能有异步事件。例如,当您执行请求时,请确保通过执行阻止调用而不是指定回调来获得结果。您可能希望确定您使用的是除套接字(WCF、WinForms等)之外的哪种库。Webservices?对我来说,这听起来很有趣。没有对该类的直接引用。但是也有对System.Threading.Thread.Sleep(1000)的调用。这会导致类似的后果吗?