キャンセルトークンが機能するために、私は信じて、この方法は、タスクの本体はキャンセルトークンを受け入れ、常にそれがそれぞれの間にキャンセルされたかどうかを確認する必要があると呼ばれていますロジックのステップ。 See here for more details。
この例は、このドキュメントの抜粋であり、取り消しトークンの状態を確認する方法の概要を示しています。
using System;
using System.Threading;
public class Example
{
public static void Main()
{
// Create the token source.
CancellationTokenSource cts = new CancellationTokenSource();
// Pass the token to the cancelable operation.
ThreadPool.QueueUserWorkItem(new WaitCallback(DoSomeWork), cts.Token);
Thread.Sleep(2500);
// Request cancellation.
cts.Cancel();
Console.WriteLine("Cancellation set in token source...");
Thread.Sleep(2500);
// Cancellation should have happened, so call Dispose.
cts.Dispose();
}
// Thread 2: The listener
static void DoSomeWork(object obj)
{
CancellationToken token = (CancellationToken)obj;
for (int i = 0; i < 100000; i++) {
if (token.IsCancellationRequested)
{
Console.WriteLine("In iteration {0}, cancellation has been requested...",
i + 1);
// Perform cleanup if necessary.
//...
// Terminate the operation.
break;
}
// Simulate some work.
Thread.SpinWait(500000);
}
}
}
// The example displays output like the following:
// Cancellation set in token source...
// In iteration 1430, cancellation has been requested...
キャンセルトークンは作業の本体として呼び出され、取り消しトークンを受け入れ、ロジックの各ステップ間でキャンセルされているかどうかを常に確認する必要があります。 –
タスクのキャンセルは相互に関係しています。トークンをキャンセルしても魔法のようにタスクが中断されるわけではなく、トークンがキャンセルされて正常に終了するかどうかをチェックする必要があります。 – Equalsk