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.");
}
}
CancellationTokenSource 和 CancellationToken:
CancellationTokenSource 用于生成取消信号。CancellationToken 是一个轻量级结构体,用于传播取消请求。LongRunningOperationAsync 方法:
token.ThrowIfCancellationRequested() 来检查是否已请求取消。如果已请求取消,则抛出 OperationCanceledException。Main 方法:
CancellationTokenSource 实例,并获取其关联的 CancellationToken。LongRunningOperationAsync 任务,并等待用户按键来触发取消操作。OperationCanceledException 并输出相应的信息。Task.Delay:
Task.Delay 模拟延迟,同时传递 CancellationToken 以确保在延迟期间也能响应取消请求。上一篇:c# 列表
下一篇:c# linq join
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站