Остановка цикла с помощью CancellationToken

Недавно начал гуглить про токены и обнаружил, что их два “вида”, так сказать.
CancellationToken и CancellationTokenSource
Хочу уточнить. В главном потоке создаём токены:

      CancellationTokenSource source = new CancellationTokenSource();
      CancellationToken token = source.Token;

Потом создаём несколько потоков:

        public static void AppendStream(CancellationToken token)
        {
            do
            {

            } while (!token.IsCancellationRequested);
        }

и всем передаём один и тот же token? Потом из любого потока вызываем source.Cancel(); и циклы во всех потоках останавливаются.
Правильно понял?

Да, там еще бывает удобно .ThrowIfCancellationRequested(), чтоб не проверять на всех уровнях вложенности.