我目前正在使用XElement
同步地将XML树(XmlWriter
)写入文件,特别是通过根元素上的XElement.WriteTo(XmlWriter)
。我试图使其异步(等待)。 XmlWriter
可以异步(XmlWriterSettings.Async = true
),并且具有许多方法的异步版本。但是,它没有方法来编写XElement
(异步与否),并且没有XElement.WriteTo(XmlWriter)
的异步版本。
可以使用什么API将XElement
异步写入文件?
答案 0 :(得分:1)
XmlWriter
有一个方法XmlWriter.WriteNodeAsync(XmlReader, Boolean)
,您可以将XmlReader
传递给XNode.CreateReader()
,例如像这样:
public static class XElementExtensions
{
public static async Task WriteToAsync(this XContainer element, Stream stream, bool defAttr = true, bool indent = false)
{
var settings = new XmlWriterSettings
{
Async = true,
CloseOutput = false,
Indent = indent,
};
using (var writer = XmlWriter.Create(stream, settings))
using (var reader = element.CreateReader())
{
await writer.WriteNodeAsync(reader, defAttr);
}
}
}
然后,如果您有一些Stream stream
,您可以按如下方式写信:
await element.WriteToAsync(stream, false, true);
示例.Net fiddle。