2

我有一个需要处理的数百个项目的循环。

通过有条件地设置一个全局 SQLConnection 来处理每个项目,其中使用此 SQLConnection 作为处理的一部分来处理项目。

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

我很欣赏这不是好的设计,我希望尽快纠正它。

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

此异常违反了外键约束,但表明它正在针对没有业务连接的 SQLConnection 进行操作。

我自然对此感到担忧,但据我所知,此应用程序中没有多线程代码。

我想知道是否可以在不显式创建新线程的情况下引入多线程

编辑:

  • VB.Net 3.5SP1
  • 控制台应用程序 + 类库
  • 偶尔调用 Web 服务
  • 进行 SQL 调用
  • 没什么别的。没有 Winforms,没有 WPF。
4

4 回答 4

1

除了已经提到的其他内容:并行扩展(PLINQ 和任务并行库)。

于 2011-03-09T14:32:38.943 回答
1

或者,任务(即任务对象)不称为线程,而是称为线程。任务通常在 lambda 表达式附近找到,检查是否有。

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

但:

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

于 2011-03-09T14:30:07.010 回答
1

是的 - 使用 System.Timers.Timer 和/或 System.Threading.Timer 可能会导致您描述的效果。每当计时器滴答时,一个新的工作项就会在 ThreadPool 中排队 - 所以本质上你有一个多线程程序,而没有显式地创建新线程。

如果计时器是 AutoReset(在调用 elapsed 后保持启用),您可能会同时导致对同一处理程序的另一个调用。

于 2011-03-09T14:28:44.160 回答
0

可能是您的代码是从 3rd 方库中调用的。通过使用事件,另一个库可以调用您的代码 - 从尽可能多的线程中调用。
我建议您检查调用更改代码的代码,并确保对您的代码没有可疑的调用。

于 2011-03-09T15:37:49.403 回答