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的方法)?