1

我正在尝试监视在单线程程序中并行运行的许多 HPC 作业的状态,我正在订阅 OnJobState 引发的事件,并且当监视少至三个作业时,事件状态更改将丢失并且作业被卡住运行.

我假设每个作业都需要一个线程来捕获所有事件,但我找不到有关单线程程序中事件下标限制的任何信息。

我原以为 .net 平台会将这一切都排队,但似乎并非如此。

4

2 回答 2

0

默认情况下,事件是同步的。这意味着引发事件的对象只有在所有事件处理程序完成其工作后才会继续执行。事件处理程序将与引发事件的对象在同一线程上运行。这导致以下结论:

  1. .NET 框架不能对任何东西进行排队,因为事件是一个接一个地引发的
  2. 您不应该在事件处理程序中进行大量计算。如果事件被快速连续触发,即使是适度的计算也应该避免。
  3. 如果要排队,则需要自己实现:在事件处理程序中,将有关新事件的信息添加到线程安全队列并从另一个线程处理此队列。
于 2011-10-11T13:25:43.190 回答
0

我使这个问题更笼统,以消除对 HPC 的混淆,看起来我无法控制事件处理程序的执行方式,因此我需要使其线程安全。

于 2011-10-12T12:08:58.757 回答