这个MSDN 示例可以不使用 来编写CancellationTokenSource
,可以直接使用 CancellationToken。
可以直接使用 aCancellationToken
还是不应该做的事情?我没有在 MSDN 上看到任何直接使用的示例,如果可以这样做的话,这会让我更加痛苦。
更新
下面的 Cod 使用一小组测试用例扩展了可接受的答案,这些测试用例证明它CancellationToken
是不可变的,因此CancellationTokenSource
如果需要控制令牌,则必须使用它。
值得一提的是CancellationTokenSource
,每次调用时 Token 属性都会返回新对象。
[TestMethod]
public void CancellationTokenProps() {
CancellationToken token = new CancellationToken(canceled:false);
Assert.IsFalse(token.IsCancellationRequested);
Assert.IsFalse(token.CanBeCanceled);
}
[TestMethod]
public void CancellationTokenSourceProps() {
CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token1 = source.Token;
CancellationToken token2 = source.Token;
Assert.IsFalse(Object.ReferenceEquals(token1, token2));
Assert.IsTrue(token1.CanBeCanceled);
Assert.IsFalse(token1.IsCancellationRequested);
Assert.IsFalse(source.IsCancellationRequested);
source.Cancel(true);
Assert.IsTrue(source.IsCancellationRequested);
Assert.IsTrue(token1.IsCancellationRequested);
}