异步保存 XElement
Saving XElement asynchronously
我目前正在使用 XmlWriter
将 XML 树 (XElement
) 同步写入文件,特别是通过根元素上的 XElement.WriteTo(XmlWriter)
。我正在尝试使其异步(等待)。 XmlWriter
可以是异步的 (XmlWriterSettings.Async = true
),并且它的许多方法都有一个异步版本。但是,它没有编写 XElement
(异步或非异步)的方法,并且没有 XElement.WriteTo(XmlWriter)
的异步版本。
什么 API 可用于将 XElement
异步写入文件?
XmlWriter
有一个方法 XmlWriter.WriteNodeAsync(XmlReader, Boolean)
to which you can pass the XmlReader
returned by 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.
我目前正在使用 XmlWriter
将 XML 树 (XElement
) 同步写入文件,特别是通过根元素上的 XElement.WriteTo(XmlWriter)
。我正在尝试使其异步(等待)。 XmlWriter
可以是异步的 (XmlWriterSettings.Async = true
),并且它的许多方法都有一个异步版本。但是,它没有编写 XElement
(异步或非异步)的方法,并且没有 XElement.WriteTo(XmlWriter)
的异步版本。
什么 API 可用于将 XElement
异步写入文件?
XmlWriter
有一个方法 XmlWriter.WriteNodeAsync(XmlReader, Boolean)
to which you can pass the XmlReader
returned by 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.