我有一个用于各种任务的令牌,我需要更好地管理它们的取消,以便收到我可以使用的取消通知:
token.Register(RegisterMethod);
如何删除此“订阅”?有没有办法“取消注册”?
我想过用 TaskCompletionSource 做一个解决方法。但我不知道它是否会运作良好。解决这种方法的最佳方法是什么?
我有一个用于各种任务的令牌,我需要更好地管理它们的取消,以便收到我可以使用的取消通知:
token.Register(RegisterMethod);
如何删除此“订阅”?有没有办法“取消注册”?
我想过用 TaskCompletionSource 做一个解决方法。但我不知道它是否会运作良好。解决这种方法的最佳方法是什么?
CancellationToken.Register
返回一个CancellationTokenRegistration
实例。如果您调用Dispose
该实例,您的注册将被删除。
您可以安全地处置整个 CancellationTokenSource。无需担心取消注册回调。
CancellationTokenSource 的 Dispose() 方法将对您通过 Token.Register(callBack) 添加到令牌中的每个注册回调调用 dispose。
没有办法真正撤消注册。虽然 dispose 方法将删除回调,但令牌仍然包含有注册的信息:
var cancellationTokenSource = new CancellationTokenSource();
basicTask = Task.Factory.StartNew(() => {
for (;;) {
var z = DateTime.Today.ToString();
}
}, cancellationTokenSource.Token);
var basicTask2 = Task.Factory.StartNew(() => {
for (;;) {
var z = DateTime.Today.ToString();
}
}, cancellationTokenSource.Token);
//var usingThisCodeWillResultInADeadlock = cancellationTokenSource.Token.Register(() => { });
//usingThisCodeWillResultInADeadlock.Dispose();
cancellationTokenSource.Cancel();
basicTask.Wait();
禁用评论将导致死锁。