如何在XDocument.LoadAsync()中使用CancellationToken

时间:2018-02-20 22:26:30

标签: async-await .net-core coreclr cancellation-token system.xml

我有以下代码从.NET Core 2

中的Stream加载XDocument
 CancellationTokenSource source = new CancellationTokenSource();
 CancellationToken token = source.Token;
 XDocument xdocument = await XDocument.LoadAsync(xmlStream, new LoadOptions(), token);

CancellationToken是必需参数。但我在这里使用CancellationToken是什么意思? 在这种情况下如何使用取消令牌

1 个答案:

答案 0 :(得分:0)

当您在异步方法中时,您应该已经收到取消令牌作为参数。如果您这样做,您可以检查取消状态(如果调用者已请求取消)并采取相应措施(抛出异常或中断操作)并将此令牌传递给您调用的异步方法

如果您没有收到令牌,您可以自己构建(如您所做)并将其传递给您。在这种情况下,您可以控制令牌源,并可以自行取消整个操作。

如果您不想使用取消功能,则无需调用取消 - 这取决于您所编写方法的性质。您可能希望根据用户输入或计时器取消长时间运行的异步方法。这只是可取消异步方法提供的选项(如问题中的LoadAsync)。

https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-cancellation

在后一种情况下,请确保丢弃令牌源 - 最好使用using块。