1

CancellationTokenは、第2パラメータとして.StartNew(,)メソッドに渡されますが、ラムダのクロージャを介してActionによってのみ使用できます。だから、.StartNew(,)メソッドの2番目のパラメータにトークンを渡す目的は何ですか?CancellationTokenをTask.Factory.StartNew()に渡す目的は何ですか?

var cts = new CancellationTokenSource(); 
var token = cts.Token; 
Task.Factory.StartNew(() => 
{ 
    while (true) 
    { 
     // simulate doing something useful 
     Thread.Sleep(100); 
    } 
}, token); 

答えて

2

StartNew方法トレッドプールにスケジュールタスクではなく、必要なスレッドが利用できない場合があるので、適切なタイミングでそれを開始します。開始の待機中に、取り消し要求が発生することがあります。その後、スレッドプールはタスクをまったく開始しません。タスクの開始後、タスクのキャンセルを処理するのはあなたの仕事です。

1

実際、Task.RunTaskfactory.StartNewに渡さCancellationTokenの目的は、タスクがが原因で他の例外のを失敗CancellationToken.ThrowIfCancellationRequestedからスローされた例外によってをキャンセルされる区別できるようにすることです。開始時に渡されたCancellationTokenをスローした場合に(たとえ別のCancellationTokenから)他の例外がFaultedに設定する一方、タスクの状態はCancelledで、ある

関連する問題