- 它用于在执行长时间运行的操作时,通过发送取消请求来终止操作。
- CancellationToken可以与异步操作一起使用,以便在操作执行期间检查是否已请求取消。它提供了一种优雅的方式来处理取消操作,避免了长时间运行的操作无法中断的问题。
var httpContext = Cfg.HttpContextAccessor.HttpContext;
await Task.Delay(5000, httpContext.RequestAborted);
//当 httpContext.RequestAborted 监听到取消时,下面的Task.Run 方法就不会执行(httpContext.RequestAborted的状态变更只有
//在 Task.Run先前变更,任务里的方法才不会执行)
try
{
// 创建一个 Task.Run 任务。
await Task.Run(async () =>
{
await Task.Delay(5000);
// 取消 CancellationTokenSource。
KK(Thread.CurrentThread.ManagedThreadId);
// 执行一些操作。
}, httpContext.RequestAborted);
}
catch (Exception e)
{
}
//针对自定义取消可以根据注册回调 / 或者 httpContext.RequestAborted.IsCancellationRequested 属性
//进行自定义控制操作
httpContext.RequestAborted.Register(() =>
{
Console.WriteLine($"用户取消了操作:【{httpContext.TraceIdentifier}】,接口:[{httpContext.Request.Path}]");
//dd.Abort();
});