Eu estou procurando uma justificativa do motivo pelo qual a CancellationToken
estrutura do .NET foi introduzida além da CancellationTokenSource
classe. Entendo como a API deve ser usada, mas também quero entender por que ela foi projetada dessa maneira.
Ou seja, por que temos:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts.Token);
...
public void SomeCancellableOperation(CancellationToken token) {
...
token.ThrowIfCancellationRequested();
...
}
em vez de passar diretamente CancellationTokenSource
como:
var cts = new CancellationTokenSource();
SomeCancellableOperation(cts);
...
public void SomeCancellableOperation(CancellationTokenSource cts) {
...
cts.ThrowIfCancellationRequested();
...
}
Isso é uma otimização de desempenho com base no fato de que as verificações de estado de cancelamento ocorrem com mais frequência do que a transmissão do token?
Para que você CancellationTokenSource
possa acompanhar e atualizar CancellationTokens
, e para cada token a verificação de cancelamento é um acesso de campo local?
Dado que um bool volátil sem travamento é suficiente nos dois casos, ainda não consigo entender por que isso seria mais rápido.
Obrigado!