c# - 在方法中的任何位置取消操作的最佳方法是什么?
问题描述
假设我在子例程或函数中进行了长时间操作,并且我希望能够在“取消标志”设置为 true 后立即取消(退出子例程或函数)。最好的方法是什么?一种方法是在每行代码之后检查标志,但这不是很优雅。
例如:
dim _CancelFlag as boolean = false
Sub LongOperation()
dim a as integer
a = 1
if _CancelFlag = True Then
Exit Sub
End If
a = 2
if _CancelFlag = True Then
Exit Sub
End If
'And so on...
End Sub
当然a = 1
只是为了说明目的。假设操作真的很长,a = 100
并且不可能将它们放入循环中,我怎样才能从子程序外部触发取消并立即停止它?
我正在考虑将 sub 放入BackgroundWorker
orTask
但是我仍然需要检查CancellationToken
sub 内部的某个地方。我真的需要在每一行代码之后检查吗?
解决方案
这取决于您想要达到的粒度:您希望您的方法取消多少秒?
如果必须“立即”取消,您必须尽可能多地办理登机手续。但是,在一般情况下,只需检查操作的长子步骤之前和之后就足够了。
请记住,如果您必须等待句柄,则必须使用指定超时或取消令牌的适当重载。
此外,您应该在您的方法深处传播取消令牌/您的标志,以允许及早检测取消请求。
推荐阅读
- java - 在 Java 8 中有一张 Set 地图,我如何将所有值放在一个集合中?
- android - Android 环境中未调用 aboutToQuit 信号?
- bdd - 如何让黄瓜为每个功能而不是每个场景实例化自定义世界?
- typescript - 有没有办法键入一个对象,以便扩展接口的所有属性都是给定的类型?
- sql - 两行相同但一列具有不同的值,如何将它们组合并摆脱另一行
- python - pymodbus 连接有时没有响应?
- installation - 跨多个系统的依赖关系
- list - 颤振将项目添加到列表
- python - 不确定当前的数据结构是否合适
- java - 如何获取主数组中子数组的值?