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#多线程实现的四种方式
下一篇:c# 进度条
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站