Подтвердить что ты не робот

CancellationToken UnRegister Действие

У меня есть токен для различных задач, и мне нужно лучше управлять их отменой, чтобы получить уведомление об аннулировании, которое я могу использовать:

token.Register(RegisterMethod);

Как удалить эту "подписку"? Есть ли способ "UnRegister"?

Я думал о том, как обходной путь с TaskCompletionSource. Но я не знаю, будет ли это работать. Каков наилучший способ решения этого подхода?

4b9b3361

Ответ 2

Невозможно действительно отменить регистрацию. В то время как метод 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();

Отключение комментариев приведет к взаимоблокировке.