我们有一个长期运行的操作,包含许多可以取消的点。如果我们要使用任务取消令牌方法,我们需要确保在每个所需位置检查取消。
这对我们来说似乎不是最理想的。我们在这里看到两个问题:
我们是否应该使用全局取消令牌来处理2.?我们应该使用AppDomain
来处理1.和2.?
答案 0 :(得分:5)
我们需要确保在每个必要的地方检查取消。
这是处理此问题的正确方法。
全局令牌不能解决每个所需位置的检查问题,并且只能帮助不将令牌作为参数传递给方法。它确实限制了你 - 如果你使用全局令牌,你就可以现在或将来修改你的例行程序,以便在飞行中进行多项操作并单独取消。
但是,我认为传递令牌实际上是一件好事。这会使您的API自我记录 - 每个接受令牌的方法都可能会引发OperationCanceledException
并支持取消。
避免这些问题的任何其他方法都需要一个不合作的取消模型。这有不利的副作用,因为强行“杀死”运行操作很少是好事(例如,有很多理由可以避免易于查找的Thread.Abort)。