ええ、シングルの使用についてあなたが言ったことCancellationToken
は正しいです。シングルを作成して、それをすべてのタスクにCancellationTokenSource
使用できます。CancellationToken
タスクはトークンを定期的にチェックしてキャンセルする必要があります。
例えば:
const int NUM_TASKS = 4;
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken ct = cts.Token;
Task[] tasks = new Task[NUM_TASKS];
for (int i = 0; i < NUM_TASKS; i++)
{
tasks[i] = Task.Factory.StartNew(() =>
{
while (true)
{
Thread.Sleep(1000);
if (ct.IsCancellationRequested)
break;
}
}, ct);
}
Task.WaitAll(tasks);
ボタンを呼び出しcts.Cancel();
てタスクをキャンセルできます。
質問の更新のための更新:
あなたが求めることをするためのいくつかの方法があります。1つの方法は、ct.IsCancellationRequested
スローせずにキャンセルを確認してから、タスクを完了できるようにすることです。その後Task.WaitAll(tasks)
、すべてのタスクがキャンセルされたときに完了します。
その変更を反映するようにコードを更新しました。