¿Por qué CancellationToken es independiente de CancellationTokenSource?

Estoy buscando una razón de por qué CancellationTokense introdujo .NET struct además de la CancellationTokenSourceclase. Entiendo cómo se utilizará la API, pero también quiero entender por qué está diseñada de esa manera. Es decir, ¿por qué tenemos: var cts = new