另一種方式我有取消任務
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 –
即使在彙編程序中它是如何完成的 - 一個在循環之外控制的變量 - 你期望什麼? –