在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
异常,以便在任务被取消时正确处理。