是否有可能在dotnet中引入多线程而无需明确创建新线程?

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

要回复问题请先登录注册