以下多任务时,使用了多个task,当取消指定Id的task时,后面的全部被取消了。怎样只取消指定的task呢?
static void Main(string[] args)
{
var cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
var tasks = new Task[3];
try
{
for (int i = 0; i < 3; i++)
{
tasks[i] = Task.Run(() =>
{
while (!cancellationToken.IsCancellationRequested) // 使用共享的取消令牌
{
// 在你想要取消任务时调用这个方法:取消第二个任务(假设你想取消ID为2的任务)
if (tasks[1] != null && tasks[1].Id == 10) // 先检查是否存在并且任务ID正确才执行取消操作,防止报错
{
cancellationTokenSource.Cancel(); // 使用共享的取消令牌来取消所有任务(但这里只会取消ID为2的任务)
}
Console.WriteLine($"Task {Task.CurrentId} is running."); // 使用 Task.CurrentId 来标识当前任务
Thread.Sleep(1000); // 模拟工作
}
Console.WriteLine($"Task {Task.CurrentId} was cancelled."); // 使用 Task.CurrentId 来标识当前任务被取消
}, cancellationToken); // 将取消令牌传递给任务
}
Task.WaitAll(tasks); // 等待所有任务完成(但其他未被取消的任务将继续运行)
Console.WriteLine("All tasks completed."); // 所有任务完成后的操作
}
catch (Exception)
{
throw;
}
Console.ReadKey();
}