Blazor中取消长时间运行任务需使用CancellationToken配合async/await,在OnInitializedAsync中创建CancellationTokenSource,DisposeAsync中取消并释放,支持手动取消按钮和HTTP/Task.Delay等原生可取消操作。
Blazor 中取消长时间运行的任务,核心是使用 CancellationToken 配合 async/await,并在组件销毁或用户主动触发时通知任务停止。
Blazor 组件(尤其是 Server-Side 或 WebAssembly)本身不自动提供取消令牌,但 ComponentBase 提供了 CancellationTokenSource 的生命周期钩子支持。推荐在 OnInitializedAsync 或 OnParametersSetAsync 中创建,并在 DisposeAsync 中取消:
DisposeAsync 中调用 _cts?.Cancel(); _cts?.Dispose();
用户可能中途想中止操作。只需暴露一个方法绑定到按钮,调用 Cancel() 即可:
不是所有操作都天然支持取消。关键点:
try/catch 中吞掉 OperationCanceledException,除非你明确要静默处理取消服务端组件可能因连接断开或页面跳转而失效,此时框架会调用 DisposeAsync —— 所以确保你的 Cancellation 在这里被正确取消,防止任务继续占用服务器资源。
TokenSource
基本上就这些。只要从开始就带着 CancellationToken 设计,取消逻辑就清晰可控。