1.以下方法,多个任务运行,可以取消指定task。
2.移植到asp.net core mvc后,由于CancellationTokenSource cancellationTokenSourcep放到了方法体的外面,在页面刷新时,cancellationTokenSourcep变量为空,导致无法追踪到token,无法取消任务。将该变量设为静态时,又会取消所有任务。此环境下正确方式是怎样呢?
static int j = 1;
static void Main(string[] args)
{
var tasks = new Task[3];
CancellationTokenSource cancellationTokenSource;
try
{
for (int i = 0; i < 3; i++)
{
// 为每个任务创建单独的 CancellationTokenSource 实例
cancellationTokenSource = new CancellationTokenSource();
var cancellationToken = cancellationTokenSource.Token;
tasks[i] = Task.Run(() =>
{
// 模拟工作,检查特定任务的取消令牌是否已取消请求(假设你想要取消ID为特定值的任务)
while (true) // 循环直到收到取消请求为止(模拟长时间运行的任务)
{
if (j==10/* 需要取消的条件 */) // 检查是否需要取消当前任务(假设ID为特定值)并作出相应的操作
{
j = 100;
cancellationTokenSource.Cancel(); // 仅取消当前任务关联的取消令牌源对应的任务
Console.WriteLine(Task.CurrentId + "取消工作");
break; // 任务一旦接收到取消信号,则跳出循环并退出任务
}
j++;
Console.WriteLine(Task.CurrentId + "正在工作");
Thread.Sleep(1000); // 模拟工作负载,这里只是一个示例,实际情况下可能会有其他操作或逻辑判断等。
}
}, cancellationToken);
}
Console.ReadKey();
}
catch (Exception ex)
{
}
}