title: If CancellationToken is a struct and is passed by Value, how is it updated?
body: <p>I see that CancellationToken is a struct
  <a href="https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken?view=netframework-4.7.1" rel="noreferrer">https://docs.microsoft.com/en-us/dotnet/api/system.threading.cancellationtoken?view=netframework-4.7.1</a></p>
  
  <p>If I pass a struct to a new function by value, it shouldn't be modified in the caller. So if i'm passing a CancellationTokenSource (by value), then I call cts.cancel(), how does the method that has a <strong>copy</strong> of that token is notified that it has been canceled? Shouldn't it work only if we pass by reference? </p>
  
  <p>For example:</p>
  
  <pre><code>public static void Main()
  {
      var cts = new CancellationTokenSource();
      SomeCancellableOperation(cts.Token);
      cts.cancel();
  }
  
  public void SomeCancellableOperation(CancellationToken token) {
  ...
      token.ThrowIfCancellationRequested();
  ...
  }
  </code></pre>