在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
異常,以便在任務被取消時正確處理。