using System;
using System.Threading;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// 创建一个 CancellationTokenSource 实例
using (CancellationTokenSource cts = new CancellationTokenSource())
{
// 获取关联的 CancellationToken
CancellationToken token = cts.Token;
// 启动一个长时间运行的任务,并传递取消令牌
Task longRunningTask = LongRunningOperationAsync(token);
// 模拟用户请求取消任务
Console.WriteLine("Press any key to cancel the task...");
Console.ReadKey();
cts.Cancel(); // 发出取消请求
try
{
// 等待任务完成
await longRunningTask;
}
catch (OperationCanceledException)
{
Console.WriteLine("Task was canceled.");
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
Console.WriteLine("Main method completed.");
}
}
static async Task LongRunningOperationAsync(CancellationToken token)
{
for (int i = 0; i < 100; i++)
{
// 检查是否已请求取消
token.ThrowIfCancellationRequested();
// 模拟工作
Console.WriteLine($"Working... {i}");
await Task.Delay(100, token);
}
}
}
CancellationTokenSource
:用于发出取消请求的对象。CancellationToken
:用于监听取消请求的令牌,通常传递给需要支持取消操作的方法或任务。LongRunningOperationAsync
:模拟一个长时间运行的任务,它会定期检查取消请求,并在收到取消请求时抛出 OperationCanceledException
。cts.Cancel()
:当用户按下任意键时,调用此方法发出取消请求。token.ThrowIfCancellationRequested()
:在任务中定期检查是否有取消请求,如果有则抛出异常,终止任务。通过这种方式,可以安全地取消长时间运行的任务,并确保资源得到正确释放。
下一篇:c# 进度条
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站