Ограничения подписки на события C # для однопоточных программ - PullRequest
1 голос
/ 11 октября 2011

Я пытаюсь отслеживать состояние многих заданий HPC, выполняющихся параллельно в однопоточной программе, я подписываюсь на события, вызванные OnJobState, и при мониторинге пропадает всего три изменения состояния событий заданий, и задание застрял работает.

Я предполагаю, что мне нужно поток для каждого задания, чтобы перехватить все события, но я не могу найти никакой информации об ограничениях нижних значений событий в одной программе потока.

Я бы подумал, что платформа .net поставит все это в очередь, но это не так.

Ответы [ 2 ]

0 голосов
/ 12 октября 2011

Я сделал этот вопрос более общим, чтобы убрать путаницу из-за HPC, похоже, я не контролирую, как выполняется мой обработчик событий, поэтому мне нужно сделать его безопасным для потоков.

0 голосов
/ 11 октября 2011

События являются синхронными по умолчанию.Это означает, что объект, который вызывает событие, продолжит свое выполнение только после того, как все обработчики событий завершат свою работу.Обработчики событий будут работать в том же потоке, что и объект, который вызывает событие.Это приводит к следующим выводам:

  1. .NET Framework не может ничего ставить в очередь, потому что события возникают один за другим
  2. Вы не должны выполнять тяжелые вычисления в обработчиках событий.Если события запускаются в быстрой последовательности, следует избегать даже умеренных вычислений.
  3. Если вы хотите поставить в очередь, вы должны реализовать это самостоятельно: в своем обработчике событий добавьте информацию о новом событии в потокобезопасная очередь и обработка этой очереди из другого потока.
...