Подтвердить что ты не робот

Безопасность потоков и System.Text.Encoding в С#

Можно ли использовать один и тот же объект Encoding из разных потоков?

Под "использованием" я имею в виду вызов Encoding.GetString(), Encoding.GetBytes() и запись некоторого XML с помощью XmlWriter (созданного чем-то вроде XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding }).

Сайт msdn утверждает, что "Любые члены экземпляра не гарантируют безопасность потоков".

Итак, как я могу безопасно писать два XML-документа одновременно? (спасибо!)

4b9b3361

Ответ 1

Да, должно быть безопасно использовать один и тот же объект Encoding, поскольку он предназначен для бездействия - в то время как Encoder и Decoder сохраняются в состоянии, сохраняя при необходимости неполные символы и т.д. Я полагаю, вы могли бы написать класс с состоянием Encoding, но это была бы очень плохая идея. Насколько мне известно, все встроенные реализации кодирования являются безстоящими и потокобезопасными.

Например, свойства Encoding.UTF8, Encoding.ASCII etc являются одиночными.