Можно ли использовать Pulse & Wait? Или это зло и причина только для записи кода?

Monitor.Pulse/Allи Monitor.Waitявляются полезными методами, но я получаю жалобы, что при использовании их в больших количествах (у меня есть дизайнер DSL, который выплевывает их на десяток), результирующий код становится нечитаемым. Что вы думаете?

11.12.2008 16:19:13
3 ОТВЕТА

Если он разбросан по всему коду, который вам действительно нужно прочитать, это может стать проблемой. Почему это так часто возникает в первую очередь? Может ли функциональность быть инкапсулирована где-то еще?

В принципе, в Wait / Pulse нет ничего плохого - но, как и все в жизни, если его использовать не по назначению, это станет проблемой. Трудно сказать, является ли ваше использование неуместным, не видя код :(

1
11.12.2008 17:10:57

Похоже, что-то, что должно быть закодировано путем инъекции как аспект. Тем не менее, мои знания о поддержке AOP в C # незначительны, поэтому я не могу предложить больше, чем это.

-1
11.12.2008 17:19:15

Я бы действительно советовал против такого подхода - со страницы MSDN на PulseEvent:

Поток, ожидающий объекта синхронизации, может быть на мгновение удален из состояния ожидания APC в режиме ядра, а затем возвращен в состояние ожидания после завершения APC. Если вызов PulseEvent происходит в то время, когда поток был удален из состояния ожидания, поток не будет освобожден, поскольку PulseEvent освобождает только те потоки, которые ожидают в момент его вызова. Поэтому PulseEvent ненадежен и не должен использоваться новыми приложениями . Вместо этого используйте условные переменные.

Теперь, Monitor.Pulse может быть написан с использованием чего-то другого, чем PulseEvent, но вся концепция довольно ошибочна - правильно используйте блокировки и условные переменные.

0
11.12.2008 17:25:21
Пульс не имеет этой проблемы. Вся концепция не ошибочна, и ее эквивалент безопасно использовался в Java в течение многих лет.
Jon Skeet 11.12.2008 17:35:07
Ну, я уже использовал это немного, и у меня не было никаких проблем (кроме людей, жалующихся).
Dmitri Nesteruk 11.12.2008 20:54:11