我有一个需要处理的数百个项目的循环。
通过有条件地设置全局SQLConnection来处理每个项目,其中在处理项目时使用此SQLConnection作为处理的一部分。
因此,至关重要的是,不允许并行处理这些项目。
我很欣赏这不是好设计,我希望尽快纠正它。
然而,尽管我付出了最大的努力,但这段代码似乎正在经历某种形式的多线程。不知何故,其中一个任务抛出异常。
此异常违反了外键约束,但表示它正在对没有业务连接的SQLConnection进行操作。
当然我对此有疑虑,但据我所知,此应用程序中没有多线程代码。
我想知道是否可以在不明确创建新线程的情况下引入多线程
编辑:
答案 0 :(得分:1)
是 - 使用System.Timers.Timer和/或System.Threading.Timer会导致您描述的效果。每当计时器打勾时,新工作项在ThreadPool中排队 - 所以基本上你有一个多线程程序而没有显式创建新线程。
如果计时器是AutoReset(在调用elapsed后仍保持启用状态),则可能会同时再次调用同一个处理程序。
答案 1 :(得分:1)
或者,任务(即Task对象)不是调用线程,而是。通常在lambda表达式附近找到任务,检查是否有任何。
哦,还有异步套接字和所有其他异步IO。
BUT:
不是不惜一切代价避免多线程,而不是更容易锁定?对不起,如果问题很幼稚,我可能会错过一些东西。
答案 2 :(得分:1)
除了已提到的其他内容:并行扩展(PLINQ和任务并行库)。
答案 3 :(得分:0)
可能是您的代码是从第三方库调用的。通过使用事件,另一个库可以调用您的代码 - 来自尽可能多的线程 我建议您检查调用更改代码的代码,并确保没有可疑的代码调用。