完整版:
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static async Task Main()
{
var cts = new CancellationTokenSource();
// 设置超时时间为10秒
cts.CancelAfter(TimeSpan.FromSeconds(3));
try
{
var result = await Task.Run(() => LongRunningOperation(cts.Token), cts.Token);
if (result == null)
{
Console.WriteLine("操作超时,已跳过相关代码。");
}
else
{
Console.WriteLine(result);
}
}
catch (Exception ex)
{
// 捕获其他异常,进行处理
Console.WriteLine($"发生异常: {ex.Message}");
}
}
private static string LongRunningOperation(CancellationToken cancellationToken)
{
for (int i = 0; i < 20; i++)
{
// 模拟每秒的工作
Thread.Sleep(1000); // 每次睡眠1秒
// 定期检查是否请求取消
if (cancellationToken.IsCancellationRequested)
{
// 返回 null 表示操作被取消
return null;
}
}
return "操作完成";
}
}
min版:
public class Program
{
public static async Task Main()
{
var cts = new CancellationTokenSource();
// 设置超时时间为3秒
cts.CancelAfter(TimeSpan.FromSeconds(3));
await Task.Run(() =>
{
for (int i = 0; i < 20; i++)
{
// 模拟每秒的工作
Thread.Sleep(1000); // 每次睡眠1秒
// 检查取消请求
if (cts.Token.IsCancellationRequested)
{
// 处理取消逻辑
Console.WriteLine("操作被取消。");
return; // 直接返回
}
}
Console.WriteLine("操作完成");
}, cts.Token);
}
}