Как вы думаете, это решение поможет вам?Вы заблокируете секцию так, чтобы только один поток мог войти в эту секцию и проверить, является ли ChannelFactory
ошибочным, и воссоздать его, но экземпляр для фабрики каналов является общим - вы возвращаете его из свойства так:
- Если вы сделаете проверку и создадите экземпляр, другой поток сможет после этого получить фабрику и вызвать ошибку перед тем, как использовать новую фабрику в исходном потоке (состояние гонки).
- Если вы воссоздаете неисправную фабрикувсе остальные потоки, которые уже содержат ссылку, все еще указывают на ошибочную.
Таким образом, решение гарантирует, что ChannelFactory
будет воссоздано в поточно-безопасном режиме, но вам все равно придется проверить, еслиФабрика неисправна везде, где вы хотели бы ее использовать (которая должна быть поточно-безопасной, чтобы быть надежной).
Я полагаю, что надежный подход заключается в создании обертки вокруг ChannelFactory
и обработке всей сложности с безопасностью потоков и проверкой ошибокФабрика внутри обертки.Оболочка предоставит метод CreateChannel
и все другие необходимые вам методы.Вы можете использовать такую оболочку для управления несколькими фабриками.