dotnetcore 2.0提供了这些异步加载XDocument的方法:
public static Task<XDocument> LoadAsync(Stream stream, LoadOptions options, CancellationToken cancellationToken);
public static Task<XDocument> LoadAsync(TextReader textReader, LoadOptions options, CancellationToken cancellationToken);
public static Task<XDocument> LoadAsync(XmlReader reader, LoadOptions options, CancellationToken cancellationToken);
然而,这些在.NET Standard 2.0中不可用。因此,选项似乎是执行同步加载(根据具体情况可能没问题),或者可能将同步加载包装在异步任务中,如下所示:
Task.Run(() => { xmlDoc = XDocument.Load(reader); });
但不确定这是否比普通同步方法带来任何好处。例如。如果代码在IIS中的AppPool进程中运行,则对来自线程池的线程执行同步调用,如果底层XmlReader在等待IO时阻塞,则该线程不会返回到线程池 - 我认为将与异步/等待方法(例如LoadAsync())一样。
我的摘要是否正确?
还有其他选择吗?