要在C#中使用async/await进行文件保存的XElement

You*_*jae 2 c# xelement filestream async-await c#-5.0

我尝试使用async/await功能从XElement对象编写xml文件.但我意识到XElement.Save()不能与async/await一起运行.

也许解决方案可以是使用XElement.Save(Stream)和FileStream对象...

所以,我写了一些如下代码,但很难用文件流处理.

public async Task SaveAsync(XElement xml, string filename)
{
    using (var fs = new FileStream(filename, FileMode.Create))
    {
        xml.Save(fs);
        await fs.WriteAsync(**please_help_me**);
    }
}
Run Code Online (Sandbox Code Playgroud)

如何处理这种方法还是有其他解决方案?

spe*_*der 5

如果你真的不想阻止IO(并挂起一个ThreadPool线程/你的线程),你可能需要使用一个临时的MemoryStream:

using(var ms = new MemoryStream())
using(var fs = new FileStream("myFile", FileMode.Create))
{
    xml.Save(ms);
    ms.Position = 0;
    await ms.CopyToAsync(fs)
}
Run Code Online (Sandbox Code Playgroud)