Por que o CancellationToken é separado do CancellationTokenSource?
Eu estou procurando uma razão de porque struct .NET CancellationToken foi introduzida além da classe CancellationTokenSource. Compreendocomo a API deve ser usada, mas também quer entenderporque é projetado dessa maneira.
Por que nós temos:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
em vez de passar diretamente o CancellationTokenSource como:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
Essa é uma otimização de desempenho com base no fato de que as verificações de estado de cancelamento acontecem com mais frequência do que a passagem do token?
Para que o CancellationTokenSource possa acompanhar e atualizar o CancellationTokens, e para cada token a verificação de cancelamento é um acesso de campo local?
Dado que um bool volátil sem bloqueio é suficiente em ambos os casos, ainda não consigo ver por que isso seria mais rápido.
Obrigado!