另一种方式我有取消任务
class Program
{
private static void MyTask(object obj)
{
var cancellationToken = (CancellationToken) obj;
if(cancellationToken.IsCancellationRequested)
cancellationToken.ThrowIfCancellationRequested();
Console.WriteLine("MyTask() started");
for (var i = 0; i < 10; i++)
{
try
{
if (cancellationToken.IsCancellationRequested)
cancellationToken.ThrowIfCancellationRequested();
}
catch (Exception ex)
{
return;
}
Console.WriteLine($"Counter in MyTask() = {i}");
Thread.Sleep(500);
}
Console.WriteLine("MyTask() finished");
}
static void Main(string[] args)
{
var cancelationTokenSource = new CancellationTokenSource();
var task = Task.Factory.StartNew(MyTask, cancelationTokenSource.Token,
cancelationTokenSource.Token);
Thread.Sleep(3000);
try
{
cancelationTokenSource.Cancel();
task.Wait();
}
catch (Exception ex)
{
if(task.IsCanceled)
Console.WriteLine("Task has been cancelled");
Console.WriteLine(ex.Message);
}
finally
{
cancelationTokenSource.Dispose();
task.Dispose();
}
Console.WriteLine("Main finished");
Console.ReadLine();
}
}
我想开始新的任务,并在一段时间后取消一个简单的控制台应用程序。是否有任何其他方式来实现这个结果而不是使用这个
if(cancellationToken.IsCancellationRequested)
cancellationToken.ThrowIfCancellationRequested();
for循环中的每次迭代?为什么我们必须在每次迭代时检查cancellationToken.IsCancellationRequested,也许我们可以使用其他的东西?
就是这么做的。当你有一个很长的任务p时,就是这样实现的,以便允许中断。 –
@DanielProtopopov如果任务被取消,我们必须单次检查evey –
即使在汇编程序中它是如何完成的 - 一个在循环之外控制的变量 - 你期望什么? –