c# – 请求取消时我是否应该抛出或退回?
考虑以下两种通过CancellationToken处理取消的方法:
public async Task DoAllAvailableWork(CancellationToken cancelToken) { foreach (var job in GetAllAvailableWork()) { await job.Process(); if (cancelToken.IsCancellationRequested()) return; } } public async Task DoAllAvailableWork(CancellationToken cancelToken) { foreach (var job in GetAllAvailableWork()) { await job.Process(); cancelToken.ThrowIfCancellationRequested(); } } 在这种情况下,job.Process()正在做一些原子工作,一旦开始就不应该或不能停止,所以它不接受CancellationToken. 有没有理由更喜欢这些方法中的一种而不是另一种?如果是,应该首选哪种方法? 检查IsCancellationRequested()并返回对我来说感觉更干净,因为抛出意味着出错了,取消是我们明确计划处理的情况(这就是我们接受CancellationToken的原因).另一方面,调用者不一定知道我们将采用哪种方法,因此无论我们选择哪个选项,他们都必须为OperationCancelledException设置try / catch. 解决方法
ThrowIfCancellationRequested是为任务延续而设计的.投掷会停止整个连续链(取消处理延续除外).任务中未处理的OperationCancelledException也将取消Task的取消令牌(如果有的话).
在你的情况下,没有任务.您可以自由定义自己的界面.但请记住,无论谁调用你的方法,也应该有办法看看你的操作是否被取消 – 毕竟,如果你拥有的只是同步方法,那么其他东西必定会导致取消.取决于取消的含义,返回错误,空结果,错误或抛出异常(但可能不是OperationCancelledException!)可能每个都有意义 – 你需要根据你正在制作的界面来定制它. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- iphone – iOS模拟器认为文档目录是/ var / root / Documen
- 使用at91sam9260在uboot下直接对nandflash操作
- Schema xsd约束文档例子
- ruby-on-rails – 使用rails react-rails gem reactor路由器
- swift3.0写一个常用的UIColor+Category.swift
- c# – 验证器和ClientIDMode问题(ASP.NET)
- xcode – 如何使用冒号在Swift中自动对齐方法参数?
- ruby-on-rails – 更快的RSpec与JRuby
- objective-c – readonly属性总是“原子”吗?
- Swift是猴还是猿?