我的任务如下:
CancellationTokenSource cts = new CancellationTokenSource();
var token = cts.Token;
var task = Task.Run(() =>
{
do {
Console.log("Check status");
if (cts.IsCancellationRequested)
{
break;
}
Thread.Sleep(5*60*1000);
status = GetStatus();
Console.log("status in while loop : " + status);
if (status == "Complete")
{
flag = 1;
break;
}
} while (flag == 1)
Console.log("status after while: " + status);
// some other businness logic
},token);
if (task.Wait(System.TimeSpan.FromMinutes(1))){
Console.log ("Success");
}
else{
Console.log ("Timed out");
cts.Cancel();
StopExecution();
}
void Stop Execution(){
Console.log ("Stopping Execution");
// logic to stop
Console.log("Stopped Successfully");
}
我已经编写了上面的代码,来运行一些任务一段时间,并在指定的时间结束时取消它。
上述代码的问题是,每当发生超时时,它都会转到else块,但它不会取消正在运行的任务。
因此,我将借助日志显示执行流程:
检查状态
while循环中的状态:InProgress
检查状态
while循环中的状态:InProgress
超时
停止执行
检查状态
成功停止
while之后的状态:InProgress
我观察到,即使任务超时,它仍在执行任务。
我的要求是,一旦时间到了,就应该结束整个任务,根本不应该执行。在这个例子中,我只展示了do while逻辑,但也有其他一些业务逻辑。
我希望停止整个任务的执行,并继续进行。有谁能告诉我,为了实现这一目标,我做错了什么?