С# эквивалентно ожиданию и уведомлению Java?

Я знаю, что вы можете заблокировать объект в С#, используя блокировку, но можете ли вы отказаться от блокировки и подождать, пока что-то еще уведомит вас о том, что он изменился, как вы можете в java с ожиданием и уведомлением?

Мне кажется, что синхронизация и блокировка в java и c# соответственно — синонимы.


person Omar Kooheji    schedule 16.10.2008    source источник


Ответы (2)


Аналогичная функциональность (включая обычную блокировку) находится в Монитор класс.

foo.notify() => Monitor.Pulse(foo)
foo.notifyAll() => Monitor.PulseAll(foo)
foo.wait() =>  Monitor.Wait(foo)

Оператор lock в C# эквивалентен вызову Monitor.Enter и Monitor.Exit с соответствующим блоком try/finally.

См. мое руководство по работе с потоками или Joe Albahari для более подробной информации.

person Jon Skeet    schedule 16.10.2008
comment
Из API Java: wait() — заставляет текущий поток ожидать, пока другой поток не вызовет метод notify() или метод notifyAll() для этого объекта. В вашем руководстве, похоже, говорится, что Monitor.Wait() ждет только в том случае, если другой поток борется за блокировку. - person ; 07.12.2011
comment
@ebyrob: Где это предполагается? - person Jon Skeet; 07.12.2011
comment
о, извините, меня смутила статья MSDN: msdn.microsoft.com/en-us/library/ говорит //Подождите, если очередь занята. перед вызовом: Monitor.Wait(m_smplQueue); Я читал оба одновременно и запутался, что есть что. - person ; 07.12.2011
comment
Я обернул их в методы расширения, чтобы упростить перенос моего кода с Java. - person Distortum; 14.12.2011
comment
@SteveTaylor: С другой стороны, это сделает его менее идиоматичным для любого, кто имеет опыт работы с .NET, читающего ваш код ... Я думаю, это зависит от вашей команды. - person Jon Skeet; 14.12.2011
comment
Команда состоит из меня, единственного основателя, запускающего свой стартап. Веб-приложение находится на Java. Код C# — это клиент API, работающий как служба Windows, что, по моему мнению, лучше всего сделать на C#. Если/когда я возьму разработчиков, ну, они могут изменить это на более идиоматическую форму, если захотят. - person Distortum; 14.12.2011

Я думаю, что Wait Handles может сработать для вас. Посмотрите, поможет ли это.

person EBGreen    schedule 16.10.2008