読者です 読者をやめる 読者になる 読者になる

C# TaskとCancellationToken

.Net 4から、タスクのキャンセルができるようになりましたが、ちょっとわかりづらかったところ。

CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;
Task.Factory.StartNew(() =>
{
  //...
  if (token.IsCancellationRequested)//<=このようにラムダ式で直接tokenを参照しつつ...

},
token); //<=ここでも引数にまたtokenを渡すのか...

まあ、上のMSDNにもTaskが実行中のOperationCanceledExceptionが同じtokenによるものか判別するのに使う的に書いてある。
あと、同じような疑問がこちらにも。Taskのコンストラクタ引数にCancellationTokenを渡すことで、タスク実行前にキャンセルされたこがチェックできるとな。
わかりましたが、でも、意図せずに違うtoken渡しすことが簡単にできちゃいますね。