Я смотрел на доступных значениях MethodImplOptions перечисления, когда я заметил следующее:Почему метод MethodImplOptions.Synchronized вызывает блокировку, если это не рекомендуется?
Блокировки от экземпляра или типа, как и с синхронизированным флагом, не рекомендуются для публичных типов, потому что код другого чем ваши собственные, могут блокировать публичные типы и экземпляры. Это может вызвать взаимоблокировки или другие проблемы синхронизации.
Так что мне интересно, почему компилятор (или это делается с помощью .Net runtime?) Делает это вместо создания частного поля и блокировки на этом?
Это звучит как простой исправить, но я полагаю, что это не ...
Это совершенно безопасно (обычное многопоточное безумие) для использования на непубличных типах. Как и в документах. –
Да, вы правы, но использование частного поля сделало бы его безопасным и с публичными типами. И я не думаю, что это вызовет какие-либо проблемы. –
Это позволяет вам разобраться и смешать и сопоставить флаг «Синхронизированный» с операторами 'lock'. Хм, может быть, это не аргумент в пользу этого ... –