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

c# cancellationtoken

作者:风外听竹   发布日期:2026-04-13   浏览:82

using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        // 创建一个 CancellationTokenSource 实例
        CancellationTokenSource cts = new CancellationTokenSource();

        // 获取关联的 CancellationToken
        CancellationToken token = cts.Token;

        // 启动一个长时间运行的任务
        Task longRunningTask = LongRunningOperationAsync(token);

        // 模拟用户请求取消操作
        Console.WriteLine("Press any key to cancel the operation...");
        Console.ReadKey();
        cts.Cancel();

        try
        {
            await longRunningTask;
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("The operation was canceled.");
        }

        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }

    static async Task LongRunningOperationAsync(CancellationToken token)
    {
        for (int i = 0; i < 10; i++)
        {
            // 检查是否已请求取消
            token.ThrowIfCancellationRequested();

            Console.WriteLine($"Working... {i + 1}/10");

            // 模拟工作
            await Task.Delay(500, token);
        }

        Console.WriteLine("Operation completed successfully.");
    }
}

解释说明:

  1. CancellationTokenSource 和 CancellationToken:

    • CancellationTokenSource 用于生成取消信号。
    • CancellationToken 是一个轻量级结构体,用于传播取消请求。
  2. LongRunningOperationAsync 方法:

    • 这是一个异步方法,模拟一个长时间运行的操作。
    • 使用 token.ThrowIfCancellationRequested() 来检查是否已请求取消。如果已请求取消,则抛出 OperationCanceledException
  3. Main 方法:

    • 创建了一个 CancellationTokenSource 实例,并获取其关联的 CancellationToken
    • 启动了 LongRunningOperationAsync 任务,并等待用户按键来触发取消操作。
    • 如果任务被取消,则捕获 OperationCanceledException 并输出相应的信息。
  4. Task.Delay:

    • 在每个工作步骤之间使用 Task.Delay 模拟延迟,同时传递 CancellationToken 以确保在延迟期间也能响应取消请求。

上一篇:c# 列表

下一篇:c# linq join

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

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

Laravel 中文站