考虑以下两种通过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.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。