是否可以在没有明确创建新线程的情况下在dotnet中引入多线程?
我有一个需要处理的几百个项目的循环。是否可以在没有明确创建新线程的情况下在dotnet中引入多线程?
每个项目通过有条件地设置,其中所述项是使用此的SQLConnection作为处理的一部分处理的全球的SQLConnection处理。
由于这个原因,所有这些项目都不允许并行处理是至关重要的。
我明白,这是不好的设计,我希望能尽快实用纠正它。
但是它似乎是,尽管我尽了最大努力,该代码正在经历某种形式的多线程的。不知何故,其中一个任务引发了一个异常。
这个例外是在违反外键约束的,但表明它是针对它没有业务连接的SQLConnection运行。
当然,我对此有顾虑,但据我所知,在这个程序没有多线程代码。
不知是否有可能引入多线程没有明确地创建新线程
编辑:
- VB.Net 3.5SP1
- 控制台应用程序+类库
- 偶尔电话网络服务
- 使SQL调用
- 没什么别的。没有Winforms,没有WPF。
是的 - 使用System.Timers.Timer和/或System.Threading.Timer可以导致您描述的效果。每当一个计时器滴答一个新的工作项在ThreadPool中排队时 - 所以基本上你有一个多线程程序而不显式创建新线程。
如果计时器自动复位(经过被称为启用后遗体),你可能会导致另一个调用相同的处理同时进行。
有趣。没有直接引用该类。但是有对System.Threading.Thread.Sleep(1000)的调用。这可能导致类似吗? – 2011-03-09 14:36:44
Nope - Sleep只会暂停当前线程。 – 2011-03-09 15:33:51
或者任务(即任务对象)不称为线程,但是。通常在lambda表达式附近找到任务,检查是否有任何。
哦,还有异步套接字以及所有其他的异步IO。
但是:
而不是试图不惜一切代价避免多线程,那岂不是更容易锁定?对不起,如果问题很天真,我可能会错过一些东西。
好的建议 - upvoted。但是在这段代码中没有使用套接字。和.Net 3.5(应该提到),所以没有任务 – 2011-03-09 14:34:03
只是出于好奇,如果你不使用套接字,你是否使用管道?你在你的问题中提到了一个连接。 – 2011-03-09 14:38:10
对不起,我的意思是一个SQLConnection到数据库。有几个数据库可能会被选中。全部具有相似的结构。我已经修改了我的问题以反映这一点。 – 2011-03-09 14:43:04
除了已经提到的其他人:并行扩展(PLINQ和任务并行库)。
难道你的代码是从第三方库调用的。通过使用事件,另一个库可以调用您的代码 - 从尽可能多的线程调用它。
我建议你检查一下调用代码的代码,确保没有可疑的代码调用。
您可能想要确定您正在使用的套接字(WCF,WinForms,...)以外的类型的库。 – 2011-03-09 14:35:06
Webservices?这听起来像插座:) – 2011-03-09 14:41:22