Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# cancellationtokensource

作者:嗜血苍狼   发布日期:2025-03-12   浏览:284

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# savefiledialog

下一篇:c# 进度条

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站