温馨提示×

c# continuewith能取消任务吗

c#
小樊
81
2024-11-26 16:17:25
栏目: 编程语言

在C#中,ContinueWith方法用于在任务完成后执行另一个任务。然而,ContinueWith本身并不能取消前一个任务。要取消一个任务,你需要使用CancellationTokenTask.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异常,以便在任务被取消时正确处理。

0