Можно ли использовать Pulse & Wait? Или это зло и причина только для записи кода? - PullRequest
0 голосов
/ 11 декабря 2008

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

Ответы [ 3 ]

1 голос
/ 11 декабря 2008

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

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

0 голосов
/ 11 декабря 2008

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

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

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

0 голосов
/ 11 декабря 2008

Звучит как то, что должно быть закодировано инъекцией как аспект. Однако мои знания о поддержке AOP в C # ничтожны, поэтому я не могу предложить ничего более этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...