Esempio n. 1
0
        internal static async Task <Tuple <XmlBuffer, XmlDictionaryWriter> > CreateBufferIfRequiredAndWriteNodeAsync(XmlBuffer buffer, XmlDictionaryWriter extWriter, XmlReader reader, int maxExtensionSize)
        {
            if (buffer == null)
            {
                buffer    = new XmlBuffer(maxExtensionSize);
                extWriter = buffer.OpenSection(XmlDictionaryReaderQuotas.Max);
                extWriter.WriteStartElement(Rss20Constants.ExtensionWrapperTag);
            }

            XmlDictionaryReader dictionaryReader = reader as XmlDictionaryReader;

            if (dictionaryReader != null)
            {
                // Reimplementing WriteNode for XmlDictionaryWriter asynchronously depends on multiple internal methods
                // so isn't feasible to reimplement here. As the primary scenario will be usage with an XmlReader which
                // isn't an XmlDictionaryReader, deferring to the synchronous implementation is a reasonable fallback.
                extWriter.WriteNode(reader, false);
            }
            else
            {
                await extWriter.InternalWriteNodeAsync(reader, false);
            }

            return(Tuple.Create(buffer, extWriter));
        }