0

0

Blazor CancellationToken 在组件中的使用方法

畫卷琴夢

畫卷琴夢

发布时间:2026-01-21 13:18:17

|

606人浏览过

|

来源于php中文网

原创

Blazor 中 CancellationToken 用于安全取消异步操作,防止内存泄漏和 UI 异常;需在 OnInitializedAsync 中使用自动注入的 token,或手动管理 CancellationTokenSource 并在 Dispose 中取消释放。

blazor cancellationtoken 在组件中的使用方法

Blazor 中的 CancellationToken 主要用于安全取消异步操作,避免组件已销毁或状态已变更时仍在执行无意义的耗时任务(比如 HTTP 请求、定时器、长循环等),防止内存泄漏、UI 异常或陈旧数据覆盖。

在 OnInitializedAsync 中使用 CancellationToken

组件初始化时发起异步加载是最常见场景。Blazor 会自动将当前生命周期的取消令牌传入 OnInitializedAsync,你只需接收并传递给 awaitable 方法即可:

protected override async Task OnInitializedAsync()
{
    try
    {
        // dataService.GetDataAsync 自动支持 CancellationToken
        items = await dataService.GetDataAsync(cancellationToken);
    }
    catch (OperationCanceledException)
    {
        // 被取消时静默处理(通常无需报错)
    }
}

注意:必须确保底层方法(如 HttpClient.GetAsync 或自定义服务)真正接收并响应该 token,否则取消无效。

手动管理 CancellationTokenSource(适用于动态触发)

当操作由用户交互(如搜索框输入、按钮点击)触发,且需支持“取消前一个请求、发起新请求”时,应手动创建 CancellationTokenSource 并及时释放:

  • 在组件字段中声明:private CancellationTokenSource? _cts;
  • 每次触发新操作前,先调用 _cts?.Cancel(); _cts?.Dispose();,再新建 _cts = new();
  • _cts.Token 传给异步方法
  • Dispose 方法中调用 _cts?.Cancel(); _cts?.Dispose(); 防止残留

示例(搜索建议):

jquery带商品分类侧边栏列表的商城导航菜单
jquery带商品分类侧边栏列表的商城导航菜单

这是一款使用jquery制作的带商品分类侧边栏列表的商城导航菜单。该商城菜单兼容ie8浏览器。用户可以通过点击左侧的下拉菜单来查看各种商品的列表,非常实用和方便。 使用方法 在页面中引入样式文件style.css和jquery.min.js文件。

下载
private async Task OnSearchInputChanged(string value)
{
    _cts?.Cancel();
    _cts?.Dispose();
    _cts = new();

    if (!string.IsNullOrWhiteSpace(value))
    {
        suggestions = await searchService.GetSuggestionsAsync(value, _cts.Token);
    }
}

public void Dispose()
{
    _cts?.Cancel();
    _cts?.Dispose();
}

监听组件销毁自动取消(关键保障)

Blazor 会在组件被移除 DOM 时调用 Dispose,但默认不自动触发取消。你需要显式绑定生命周期事件:

  • OnInitializedOnParametersSet 中注册:Disposal.Register(() => _cts?.Cancel());
  • 或重写 Dispose(bool disposing)(推荐,尤其在继承 ComponentBase 的基类中统一处理)
  • 确保所有长期运行的异步操作都接受 token,并在 catch (OperationCanceledException) 中正确退出,不更新状态

未响应取消的代码(如没传 token、忽略异常、仍调用 StateHasChanged())会导致“对象已释放”异常或 UI 错乱。

常见误区提醒

不要在非 async 方法中直接调用 token.ThrowIfCancellationRequested() —— 这会抛出异常但无法被 Blazor 的异步上下文捕获,可能中断渲染流程。
不要复用同一个

CancellationToken 实例跨多次独立操作 —— 它是一次性的,取消后不可重置。
不要依赖 IsCancellationRequested
轮询代替真正异步取消 —— 对 I/O 操作无效,且消耗 CPU。

基本上就这些。核心就两点:让异步调用真正“听” token,让 token 在组件消亡时“准时失效”。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6100

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

810

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1063

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1268

2024.03.01

DOM是什么意思
DOM是什么意思

dom的英文全称是documentobjectmodel,表示文件对象模型,是w3c组织推荐的处理可扩展置标语言的标准编程接口;dom是html文档的内存中对象表示,它提供了使用javascript与网页交互的方式。想了解更多的相关内容,可以阅读本专题下面的文章。

3094

2024.08.14

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

375

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

412

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2003

2024.03.12

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号