C# 异步保存XElement
我目前正在使用C# 异步保存XElement,c#,asynchronous,async-await,xelement,xmlwriter,C#,Asynchronous,Async Await,Xelement,Xmlwriter,我目前正在使用XmlWriter,特别是通过根元素,将XML树(XElement)同步写入文件。我正在尝试使其异步(带有等待)XmlWriter可以设置为异步(XmlWriterSettings.Async=true),它的许多方法都有一个异步版本。但是,它没有编写XElement(异步或非异步)的方法,也没有XElement.WriteTo(XmlWriter)的异步版本 什么API可以用于异步将XElement写入文件?XmlWriter有一种方法,您可以将XElement返回的XmlRea
XmlWriter
,特别是通过根元素,将XML树(XElement
)同步写入文件。我正在尝试使其异步(带有等待)XmlWriter
可以设置为异步(XmlWriterSettings.Async=true
),它的许多方法都有一个异步版本。但是,它没有编写XElement
(异步或非异步)的方法,也没有XElement.WriteTo(XmlWriter)
的异步版本
什么API可以用于异步将XElement写入文件?
XmlWriter
有一种方法,您可以将XElement返回的XmlReader
传递给该方法,例如:
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);
}
}
}
然后,如果您有一些流
,您可以按如下方式对其进行写入:
await element.WriteToAsync(stream, false, true);
示例。我真的怀疑以异步方式进行cpu受限的工作是否有好处
Task.Run()
是一个选项,但我认为它对性能的危害大于好处,除非它的值确实是一个巨大的数据量;然而,如果这是一个如此糟糕的想法,为什么XmlWriter有这么多异步方法(我仍然不明白为什么没有可以编写XElement的方法)?