-1

我有以下代码从 Stream 中加载 XDocument.NET Core 2

 CancellationTokenSource source = new CancellationTokenSource();
 CancellationToken token = source.Token;
 XDocument xdocument = await XDocument.LoadAsync(xmlStream, new LoadOptions(), token);

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

4

1 回答 1

0

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

如果您没有收到令牌,您可以自己构建它(就像您所做的那样)并传递它。在这种情况下,您可以控制令牌来源并且可以自己取消整个操作。

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

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

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

于 2018-02-21T20:25:03.790 回答