Я пишу службу WCF на C#. Первоначально моя реализация имела статический конструктор для выполнения одноразовой инициализации, но некоторые из инициализации, которые выполняются, могут (временно) терпеть неудачу.Обработка исключения инициализатора (статического конструктора)
Похоже, что статические конструкторы вызываются только один раз, даже если первая (неудачная) попытка бросила исключение? Любые последующие попытки создать экземпляр моего класса немедленно сработают с TypeInitializationException
без фактического выполнения кода.
Спецификация языка C# заявляет, что статический конструктор вызывается не более одного раза, но в основном это делает исключение в случае ошибки, с которой вы никогда не сможете восстановить, даже если вы ее поймаете?
Я что-то упустил? Я полагаю, что я должен перемещать все, что может быть опасно для конструктора экземпляра службы, и вручную проверить, была ли уже начата инициализация класса ранее?
Это на самом деле то, что у меня есть сейчас, за исключением того, что я использую какую-то двойную проверенную блокировку, а мой' _initialized' bool 'volatile' (не должен необходимо без двойной проверки блокировки) – Thorarin