在C#中,ContinueWith
方法用于在任务完成后执行另一个任务。然而,ContinueWith
本身并不能取消前一个任务。要取消一个任务,你需要使用CancellationToken
和Task.Run
方法。
下面是一个示例,展示了如何使用CancellationToken
取消一个任务:
using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static void Main()
{
CancellationTokenSource cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
Task task = Task.Run(() =>
{
for (int i = 0; i < 10; i++)
{
if (token.IsCancellationRequested)
{
Console.WriteLine("任务被取消");
return;
}
Console.WriteLine("任务执行中: " + i);
Thread.Sleep(1000);
}
}, token);
// 在5秒后取消任务
cts.CancelAfter(5000);
try
{
task.Wait();
}
catch (AggregateException ae)
{
foreach (var e in ae.InnerExceptions)
{
if (e is OperationCanceledException)
{
Console.WriteLine("任务被取消");
}
else
{
Console.WriteLine("任务发生异常: " + e.Message);
}
}
}
}
}
在这个示例中,我们创建了一个CancellationTokenSource
对象,并将其传递给Task.Run
方法。我们还传递了一个CancellationToken
对象,以便在需要时取消任务。然后,我们在5秒后调用cts.CancelAfter
方法来取消任务。最后,我们使用try-catch
块捕获AggregateException
异常,以便在任务被取消时正确处理。