長時間実行されるプロセスをシミュレートする新しいタスクを作成するサンプル コードを次に示します。そのようなタスクには何もなく、純粋にキャンセル機能に焦点を当てています. キャンセルトークンを使用してタスクをキャンセルしていますが、コードは正常に機能します。
CancellationTokenSource CTS = new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else { Console.WriteLine("Thread Cancelled");break; }
}
return true;
}, CTS.Token, TaskCreationOptions.None);
PTask.Start();
Console.WriteLine("Hit Enter to cancel the Secondary thread you have started");
Console.ReadLine();
CTS.Cancel();
System.Console.WriteLine(PTask.Result);
しかし、私が理解できなかったのは、コンストラクターCTS.Token
に渡されるトークン パラメーター ( ) です。Task
トークンをコンストラクターに渡さなくても実際にタスクをキャンセルできる場合、パラメーターを渡すことの実際の使用法は何ですか。
以下は、トークン パラメーターなしで動作するわずかに変更されたバージョンです。
CancellationTokenSource CTS = new CancellationTokenSource();
Task<Boolean> PTask = new Task<Boolean>(() =>
{
while (true)
{
if (!CTS.Token.IsCancellationRequested)
{
Thread.Sleep(5000);
}
else
{
Console.WriteLine("Thread Cancelled");
break;
}
};