Действительно ли безопасно использовать то же Encoding
объект от различных потоков?
Путем "использования" я имею в виду, звоня Encoding.GetString()
, Encoding.GetBytes()
и запишите некоторый XML с XmlWriter
(созданный чем-то как XmlWriter.Create(myStream, new XmlWriterSettings() { Encoding = myEncoding })
.
Сайт MSDN указывает, что "Любые члены экземпляра, как гарантируют, не будут ориентированы на многопотоковое исполнение".
Так, как я могу безопасно записать два XML-документа одновременно? (спасибо!!)
Да, использование одного и того же объекта Encoding
должно быть безопасным, поскольку он спроектирован без сохранения состояния - тогда как Encoder
и Decoder
сохраняют состояние, поддерживая неполные символы и т. д. при необходимости. Я полагаю, вы могли бы написать класс Encoding
с отслеживанием состояния, но это было бы очень плохой идеей. Насколько мне известно, все встроенные реализации кодирования не сохраняют состояния и потокобезопасны.
Например, свойства Encoding.UTF8
, Encoding.ASCII
и т. Д. Являются одиночными.